質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1672閲覧

pythonで多次元行列を実装するには(多次元正規分布の分散行列)

kohekoh

総合スコア140

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/10/17 13:31

タイトル通りです

仮に50000×50000のような多次元のゼロ行列を作ろうとすると

python

1numpy.zeros((50000,50000))

のようになると思うのですが
もちろんメモリオーバーになります

このような大規模行列を実装する方法はあるのでしょうか

やりたいこととしては
多次元正規分布があるとして,仮に変数が50000個あるとすると
50000×50000の分散の行列になると思うのですが
これを機械学習で推定していきたいというものです

これを解消するにはどうすればよいでしょうか

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

グラフを隣接行列ではなく、隣接リストで表すと、メモリが削減できるように
疎行列の0要素を持たないようにするといいと思います。
密行列の場合は、分かりません。

投稿2018/10/17 18:46

ruei

総合スコア284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

まったく無駄なく1変数8byteで表現できたとしても2.5*10^9 byteですか・・・

まあ、乗らないというほどでもないのでは。16GB以上のメモリを積んだマシンなら、たぶんメモリに乗り切ると思います。効率的に計算できるかはまったく別ですが。

いずれにせよ50000*50000を直接扱うのは無茶なので、低ランク近似ですね。さすがにメジャーな話題なので、大規模向きの手法はたくさん提案されているはずですし、ライブラリも探せばあるでしょう。

投稿2018/10/17 15:50

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

零の要素が多い行列 (疎行列) の表現は、scypi.sparse など疎行列を扱うパッケージを使えます。
機械学習ライブラリ scikit-learn でも疎行列形式を利用できます。

scypi.sparse
Python: scipy.sparseで疎行列計算する

このような大規模行列を実装する方法はあるのでしょうか やりたいこととしては多次元正規分布があるとして,仮に変数が50000個あるとすると50000×50000の分散の行列になると思うのですがこれを機械学習で推定していきたいというものです

50000×50000 の行列が密行列でメモリの乗り切らないのなら無理です。
問題設定を見直してください。


np.float32

  • 別名: 単精度
  • 必要なバイト数: 4バイト5万5万
  • 表現できる桁数: 約8桁

np.float64 (Python の float)

  • 別名: 倍精度
  • 必要なバイト数: 8バイト5万5万
  • 表現できる桁数: 約15桁

単精度の精度で十分であれば、float32 でもよいです。
実際、Deep Learning や 3DCG では大量のデータを扱う、倍精度ほどの精度が必要ないという理由で、単精度が一般的に使われています。

投稿2018/10/17 14:21

編集2018/10/18 11:46
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kohekoh

2018/10/18 00:52

単位行列なので大丈夫です しかし,最初の5万×5万が乗らないのですが そのときはどうしたらいいんですかね
kohekoh

2018/10/18 01:06

ちなみにfloatの型を下げたらのったのですが 下げたらいけないなんてことはないですよね 扱う値を表現できるくらまで下げても大丈夫ですよね?
tiitoi

2018/10/18 11:42

追記しました。どのくらいの精度が必要かによります。
kohekoh

2018/10/18 11:44

なるほどです ありがとうございます
tiitoi

2018/10/18 11:46

すいません。回答に誤記がありました。単精度の場合約8桁、倍精度の場合約15桁の精度があります。丸め誤差によりこれより精度が落ちる場合はあります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問