UPDATE: - Эта проблема решена после перезагрузки компьютера. Пока еще не удалось выяснить, почему эта ошибка происходила раньше.Освобождение памяти огромного массива numpy в IPython
У меня есть функция, которая загружает массив огромного размера (~ 980 МБ) и возвращает его.
Когда я впервые запускаю Ipython и вызываю эту функцию, он без проблем загружает массив в переменную.
Но если я снова запустил ту же команду, она выйдет из строя «Ошибка памяти».
Я попытался следующие,
del hugeArray
Все та же ошибка происходит. Я даже попробовал следующую
del hugeArray
gc.collect()
gc.collect()
Первоначально gc.collect()
вернулся 145 и второй вызов возвращается 48. Но даже после этого, когда я вызываю функцию, она по-прежнему поднимая ошибку памяти.
Единственный способ, которым я мог загрузить снова, - перезагрузить ipython. Есть ли что-то, что я могу сделать, чтобы освободить всю память в ipython, так что мне не нужно ее перезапускать?
---------------- Update
Ниже приводится выход %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'>
из этого, гр мой модуль, содержащий функцию, Я использовал для загрузки куба данных.
--------- Как Воспроизведите ошибку
Следующая простая функция способна воспроизвести ошибку.
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
ошибки памяти нет.
Можете ли вы попробовать вызвать 'whos' в ipython, чтобы узнать, что занимает память? – tiago
@tiago: Я добавил результат команды% whos. Он не показывает ничего, кроме загруженных модулей. – indiajoe
Можете ли вы показать счетчик ссылок объекта перед его удалением? 'import sys; sys.getrefcount (testcube)' – HYRY