質問: タイトル通りです 仮に50000×50000のような多次元のゼロ行列を作ろうとすると ``` numpy.zeros((50000,50000)) ``` のようになると思うのですが もちろんメモリオーバーになります このような大規模行列を実装する方法はあるのでしょうか やりたいこととしては 多次元正規分布があるとして,仮に変数が50000個あるとすると 50000×50000の分散の行列になると思うのですが これを機械学習で推定していきたいというものです これを解消するにはどうすればよいでしょうか
回答: 零の要素が多い行列 (疎行列) の表現は、`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 では大量のデータを扱う、倍精度ほどの精度が必要ないという理由で、単精度が一般的に使われています。