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