web-dev-qa-db-ja.com

巨大な行列を作成するNumpyメモリエラー

私はnumpyを使用して巨大な行列を作成しようとしています。これを行っているときに、メモリエラーが発生します

マトリックスは重要ではないので、簡単にエラーを再現する方法を示します。

a = 10000000000
data = np.array([float('nan')] * a)

当然のことながら、これは私を投げますMemoryError

伝えたいことが2つあります。

  1. 大きなマトリックスを作成して使用する必要があります
  2. このマトリックスを処理するのに十分なRAM=があると思います(24 GbまたはRAMを持っています)

Numpyで大きな行列を処理する簡単な方法はありますか?

安全のために、私は以前にこれらの投稿を読みました(似ているように聞こえます)。

Python and NumPy を使用した非常に大きな行列

Python/Numpy MemoryError

python-メモリエラー

P.S。どうやら、数値の乗算と除算に問題があり、十分なメモリがあると思いました。ですから、私が眠りに就き、数学を見直し、記憶を買う時がきたと思います。

この時期かもしれませんが、24 GBのRAMだけを使用してこのマトリックスを実際に作成する方法を考え出す天才がいるかもしれません。

なぜこの大きなマトリックスが必要なのですかこのマトリックスを使用して操作を行うことはありません。 pytables に保存するだけです。

11
Salvador Dali

各浮動小数点数がそれぞれ4バイトであると仮定すると、

(10000000000 * 4) /(2**30.0) = 37.25290298461914

または、メモリに保存する必要がある37.5ギガバイト。つまり、24GBのRAM=で十分だとは思いません。

27
Eric Urban

このような行列を作成する余裕はないが、いくつかの計算を行いたい場合は、 sparse matrix を試してください。

ダックタイピングを使用する別のPythonパッケージに渡したい場合__getitem__で独自のクラスを作成できますダミーアクセスの実装。

5
Tigran Saluev

pythonに対してpycharmエディターを使用する場合、メモリ設定を

C:\ Program Files\JetBrains\PyCharm 2018.2.4\bin\pycharm64.exe.vmoptions

このファイルからpycharm速度を下げることができるので、プログラムメモリはより多くのメガビットを割り当てるため、このコードを編集する必要があります

-Xms1024m
-Xmx2048m
-XX:ReservedCodeCacheSize=960m

したがって、それらを-Xms512m -Xmx1024mにすると、プログラムは動作しますが、pycharmのデバッグパフォーマンスに影響します。

1
Ottoman Empire