更新:- この問題は、マシンの再起動後に自動的に解決されました。このエラーが以前に発生した理由をまだ理解できていません。
巨大なnumpy配列(〜980MB)をロードして返す関数があります。
最初に Ipython を起動してこの関数を呼び出すと、問題なく配列が変数に読み込まれます。
しかし、同じコマンドをもう一度実行すると、「メモリ エラー」が発生して終了します。
私は次のことを試しました、
del hugeArray
それでも同じエラーが発生していました。私も次のことを試しました
del hugeArray
gc.collect()
gc.collect()
最初gc.collect()
は 145 が返され、2 回目の呼び出しでは 48 が返されました。しかし、この後も関数を呼び出すと、まだメモリ エラーが発生していました。
再度ロードできる唯一の方法は、ipython を再起動することでした。再起動する必要がないように、ipython のすべてのメモリを解放するためにできることはありますか?
- - - - - - - - アップデート
以下はの出力です%whos
Variable Type Data/Info
------------------------------
gc module <module 'gc' (built-in)>
gr module <module 'Generate4mRamp' <...>rom 'Generate4mRamp.pyc'>
np module <module 'numpy' from '/us<...>ages/numpy/__init__.pyc'>
plt module <module 'matplotlib.pyplo<...>s/matplotlib/pyplot.pyc'>
このうち、gr は、データ キューブをロードするために使用した関数を含むモジュールです。
---------エラーの再現方法
次の簡単な関数でエラーを再現できます。
import numpy as np
import gc
def functionH():
cube=np.zeros((200,1024,1024))
return cube
testcube=functionH() #Runs without any issue
del testcube
testcube=functionH() # Raises Memory Error
del testcube
gc.collect()
gc.collect()
testcube=functionH() # Still Raises Memory Error
このエラーは Ipython でのみ発生しています。を与えた後の単純なpython(>>>)del testcube
では、メモリエラーはありません。