4
我正在使用迭代循环来使用Matplotlib绘制所有数据。当代码保存了大约768张图时,它会引发以下异常。在循环中保存Matplotlib图时的内存溢出
RuntimeError: Could not allocate memory for image
我的电脑有大约3.5 GB的RAM。 有没有任何方法可以平行释放内存,使内存不会耗尽?
我正在使用迭代循环来使用Matplotlib绘制所有数据。当代码保存了大约768张图时,它会引发以下异常。在循环中保存Matplotlib图时的内存溢出
RuntimeError: Could not allocate memory for image
我的电脑有大约3.5 GB的RAM。 有没有任何方法可以平行释放内存,使内存不会耗尽?
当你完成这些工作后,你还记得close
的数字吗?例如:
import matplotlib.pyplot as plt
#generate figure here
#...
plt.close(fig) #release resources associated with fig
作为一个稍微不同的答案,请记住你可以重复使用数字。例如:
fig = plt.figure()
ax = plt.gca()
im = ax.imshow(data_list[0],...)
for new_data in data_list:
im.set_cdata(new_data)
fig.savefig(..)
这将使您的代码运行得更快,因为它不需要设置和拆卸700次以上的数字。
是的,我没有关闭这个数字。非常感谢。但我收到一个异常:Traceback(最近调用最后一个):文件“C:\ Python27 \ lib \ site-packages \ matplotlib \ backends \ backend_qt4.py”,第156行,在 lambda:self.close_event())文件“C:\ Python27 \ lib \ site-packages \ matplotlib \ backend_bases.py”,第1564行,在close_event中self.callbacks.process(s,event)RuntimeError:包装的C/C++对象类型FigureCanvasQTAgg已被删除 –
tanzil
2013-05-03 14:24:53
似乎喜欢与后端之一搞笑的东西。你在修改哪些后端被合并? (FWIW,我怀疑我会知道这个答案,可能值得在稍微调查一下后再打开另一个问题) – mgilson 2013-05-03 14:26:38
这是QT4后端的一个错误,它们被轻微的破坏,C++对象在'mpl'被真正完成之前,被'pyqt'释放和清理。忽略这些错误是安全的,并且它已经被固定在主干上(我不记得这个修复是否使它进入了1.2错误修复版本) – tacaswell 2013-05-03 22:35:48