2017-07-02 169 views
1

在用pyplot绘制几张图之后,Python发现了一个内存错误(我在笔记本上绘制了超过一百万个点的图 - 并且在错误与点数有直接关系之前可以绘制多少个图)。如何清除Python/matplotlib内存?

内存如何被清除后,以便我可以绘制更多的图表?现在唯一的选择是ctrl + .重新启动内核。

我已经试过推荐:

matplotlib.pyplot.close("all") 
matplotlib.pyplot.clf() 

不会清除错误。

回答

0

假设您正在使用Jupyter笔记本,您可以在单元格中调用%reset

+0

标准acer笔记本电脑。 – Tony

+0

Tony,Jupyter Notebook是一款软件(许多Python IDE中的一种),而不是硬件。 – user3666197

+0

user3666197我正在使用Spyder。 – Tony

0

也许这已被固定在最近的版本,但我还是用这样的:

plt.close() 
# http://matplotlib.org/users/pyplot_tutorial.html 
# >>> WORKING WITH MULTIPLE FIGURES AND AXES 
# is a must 

pyplot tutorial解释:

如果您做大量的数据,你需要知道还有一件事:一个人物所需要的内存在.close()明确关闭之前并未完全释放。

删除对图中所有引用和/或使用的窗口管理器杀死其中的身影出现在屏幕上的窗口,是远远不够的,因为pyplot保持内部参考直到.close()被调用。


如果没有处理,也可以崩溃python解释作为一个整体

有很多头疼的与此有关。

# ##################################################################################### 
# 
# AFTER SOME 50 calls, matplotlib crashed first, after a few more, python was killed too 
# 
# ###################################################################################### >>> http://stackoverflow.com/questions/32318643/how-to-properly-delete-a-matplotlib-figure-embedded-in-a-child-window-in-pyside 
# 
# Traceback (most recent call last): 
# File "C:\Python27.anaconda\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 91, in paintEvent 
#  stringBuffer = self.renderer._renderer.tostring_bgra() 
# MemoryError 
# Traceback (most recent call last): 
# File "C:\Python27.anaconda\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 91, in paintEvent 
#  stringBuffer = self.renderer._renderer.tostring_bgra() 
# MemoryError 
# Traceback (most recent call last): 
# File "C:\Python27.anaconda\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 91, in paintEvent 
#  stringBuffer = self.renderer._renderer.tostring_bgra() 
# MemoryError 
# Traceback (most recent call last): 
# File "C:\Python27.anaconda\lib\site-packages\matplotlib\backends\backend_qt5agg.py", line 91, in paintEvent 
#  stringBuffer = self.renderer._renderer.tostring_bgra() 
# MemoryError 
# 
# ###################################################################################### 
+0

提问者已经尝试使用'matplotlib.pyplot.close(“all”)'。你的答案在多大程度上提供了新的解决方案? – ImportanceOfBeingErnest

+0

我正试图让这个答案对每个人都有用。这里没有涉及任何侵害。我也没有删除任何内容,但是根据格式准则进行了制作。用'>'引用需要明确引用来自哪里(链接到其他内容),否则它应该是纯文本。标题旨在用作部分的标题,而不是使普通内容更大。我仍然不清楚,这个答案为帮助提问者增加了什么,所以你可能想更好地解释一下,你认为'plt.close()'与'plt.close(“all”)' 。 – ImportanceOfBeingErnest

+0

user3666197:我已向主持人报告了您的评论。我们已经谈了很多这样的话:请愿意接受对您工作的合理修改。 @Importance提到的报价问题出现了很多。如果材料来自其他地方,并且您引用了来源,那么这是一个引用。报价块不是通用荧光笔设备。 – halfer