作成するデータのサイズは、データの行列サイズと精度の種類によって異なります。
np.random.normal
を使用して、float64精度の型の値を持つ行列を作成しようとしています。 64番号は、各番号に64ビットを使用していることを意味します。したがって、各番号には8バイト(バイトあたり8ビット)のメモリが必要です。マトリックスの形状/寸法が4000x794832
の場合は、〜23.7GB [4000 * 794832 * 8]のメモリ割り当てが必要です。
16GBのRAMを使用している場合は十分ではないため、十分に定義されている場合はSWAPを使用するため、作成に時間がかかり、メモリが不足することがあります。
質問は、浮動小数点数の精度が必要ですか?なぜなら、通常の科学者の発展のためにはそうだと思われるからです。したがって、次の数学演算を高速化するには、行列の精度タイプをfloat16([4000 * 794832 * 2]など)に変更することを検討してください。
import numpy as np
a = np.random.normal(0, 0.7**2, size=(4000,794832))
a.nbytes # will give a size of 25434624000 [~23.7GB] (huge number)
b = np.random.normal(0, 0.7**2, size=(4000,794832)).astype(np.float16)
b.nbytes # will give a size of 6358656000 [~5.9GB](big but at least you can do everything on RAM)
この場合の問題は、非常に効率的なオプションではありませんこれは、のfloat64マトリックスを作成し、それを変換しますのでnp.random.normal
は、dtype
直接numpyのを定義するオプションを持っていないことです。しかし、他の選択肢がない場合...
4 TB以上のRAMが必要です。スワップスペースが十分ではないと思います。 – Daniel
https://stackoverflow.com/questions/1053928/very-large-matrices-using-python-and-numpy – clockwatcher
消費者クラスのPCに1兆個の要素を含む配列を格納する方法はありません。二次メモリを使用したとしても、テラバイト級のハードディスクが必要です。実際に10^6 x 10^6配列で何をしようとしていますか?これはXYの問題かもしれません – JacaByte