質問: np.random.rand(1000*1000*100*100) mtrand.pyx in mtrand.RandomState.rand() mtrand.pyx in mtrand.RandomState.random_sample() mtrand.pyx in mtrand.cont0_array() MemoryError: ``` となってメモリが足りないといわれます。 他の変数に確かにメモリがとられていることもあり、そちらの変数のキャッシュを消す方法はもちろん あるのですが、そもそもjupyterのメモリを増やすことができればそれが一番良いと思うのですが、 メモリを増やす方法よりどの変数がメモリを食っているか、またその変数のキャッシュをどうやって消すかばかり書いてあり知りたい情報に出会えなかったので質問させていただきました。 bigdataの時代において、この程度でメモリが足りなくなるとは到底思えないので何かいい方法があると思うのですが、もし知っている方がいれば教えていただきたいです。 よろしくお願いいたします!!
回答: > > そもそもjupyterのメモリを増やすことができればそれが一番良いと思うのですが、 > > > Jupyter Notebook は、とくに設定等しなくても PC に搭載してあるメモリは全部使えます。 > > bigdataの時代において、この程度でメモリが足りなくなるとは到底思えないので > > > numpy.random.rand() は numpy.float64 型の配列を返す関数ですが、 numpy.float64 型は1つの値を表すのに8 bytes (64 bits) 必要です。 今回、要素の数が 1000*1000*100*100 = 10000000000 なので、必要なメモリ量を計算すると 10000000000 * 8 bytes = 80000000000 / 2^30 GB = 74.51 GB 必要ということになります。 一般的な家庭用PCが搭載しているメモリ量は 8GB、16GB とかなので、このサイズの配列を扱うのはメモリが足りなくて無理でしょう。 一般的な PC で扱える配列のサイズは 1000*1000 ぐらいと思っておいたほうがよいです。 それ以上大きいと、メモリに載ったとしても、計算時間がかかりすぎてしまいます。