UPDATE:-この問題は、マシンの再起動後に解決しました。このエラーが以前に発生した理由をまだ理解できていません。
巨大な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
_を指定した後、メモリエラーはありません。
値を見ていますか? IPythonは、出力変数をたとえばOut[8]
ですので、調べればメモリに保存されます。
できるよ %xdel testcube
変数を削除し、IPythonのキャッシュから削除します。または、%reset out
または%reset array
は、出力履歴をすべてクリアするか、numpy配列への参照のみをクリアします。