私はnumpyを使用して巨大な行列を作成しようとしています。これを行っているときに、メモリエラーが発生します
マトリックスは重要ではないので、簡単にエラーを再現する方法を示します。
a = 10000000000
data = np.array([float('nan')] * a)
当然のことながら、これは私を投げますMemoryError
伝えたいことが2つあります。
Numpyで大きな行列を処理する簡単な方法はありますか?
安全のために、私は以前にこれらの投稿を読みました(似ているように聞こえます)。
Python and NumPy を使用した非常に大きな行列
P.S。どうやら、数値の乗算と除算に問題があり、十分なメモリがあると思いました。ですから、私が眠りに就き、数学を見直し、記憶を買う時がきたと思います。
この時期かもしれませんが、24 GBのRAMだけを使用してこのマトリックスを実際に作成する方法を考え出す天才がいるかもしれません。
なぜこの大きなマトリックスが必要なのですかこのマトリックスを使用して操作を行うことはありません。 pytables に保存するだけです。
各浮動小数点数がそれぞれ4バイトであると仮定すると、
(10000000000 * 4) /(2**30.0) = 37.25290298461914
または、メモリに保存する必要がある37.5ギガバイト。つまり、24GBのRAM=で十分だとは思いません。
このような行列を作成する余裕はないが、いくつかの計算を行いたい場合は、 sparse matrix を試してください。
ダックタイピングを使用する別のPythonパッケージに渡したい場合、__getitem__
で独自のクラスを作成できますダミーアクセスの実装。
pythonに対してpycharmエディターを使用する場合、メモリ設定を
C:\ Program Files\JetBrains\PyCharm 2018.2.4\bin\pycharm64.exe.vmoptions
このファイルからpycharm速度を下げることができるので、プログラムメモリはより多くのメガビットを割り当てるため、このコードを編集する必要があります
-Xms1024m
-Xmx2048m
-XX:ReservedCodeCacheSize=960m
したがって、それらを-Xms512m -Xmx1024mにすると、プログラムは動作しますが、pycharmのデバッグパフォーマンスに影響します。