【问题标题】:How to clear Python/matplotlib memory? [duplicate]如何清除 Python/matplotlib 内存? [复制]
【发布时间】:2017-12-05 16:37:36
【问题描述】:

Python 在使用 pyplot 绘制了几张图后会出现内存错误(我在笔记本电脑上绘制了超过一百万个点的图 - 以及在错误与点数有直接关系之前可以绘制多少张图)。

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

我已经尝试了推荐的:

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

不清除错误。

【问题讨论】:

    标签: python memory matplotlib


    【解决方案1】:

    我已经为此奋斗了好几个星期,唯一对我有用的是这里提供的解决方案:

    How to clear memory completely of all Matplotlib plots

    matplotlib.pyplot.figure().clear()
    matplotlib.pyplot.close()
    

    以下内容:

    plt.cla()
    

    plt.clf() 
    

    根本不适合我...我怀疑是因为它是为当您有多个子图时设计的...

    【讨论】:

      【解决方案2】:

      假设您正在使用 Jupyter Notebook,您只需在单元格中调用 %reset

      【讨论】:

      • 标准宏基笔记本电脑。
      • Tony,Jupyter Notebook 是一个软件(众多 Python IDE 之一),而不是硬件。
      • user3666197 我正在使用 Spyder。
      【解决方案3】:

      也许这已在最近的修订版中得到修复,但我仍然使用这个:

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

      pyplot tutorial 解释:

      如果您要制作大量图形,您还需要注意一件事:图形所需的内存在使用.close() 显式关闭之前不会完全释放。

      删除对图的所有引用,和/或使用窗口管理器杀死屏幕上出现图的窗口是不够的,因为 pyplot 会一直维护内部引用,直到 @ 987654325@ 被调用。


      如果不处理,也会使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
      #
      # ######################################################################################
      

      【讨论】:

      • 提问者已经尝试过使用matplotlib.pyplot.close("all")。您的回答在多大程度上为解决这个问题提供了新的东西?
      • 我试图让这个答案对每个人都有用。这里不涉及侵略。我也没有删除任何内容,而是根据格式指南制作的。 > 的引用需要明确引用的来源(链接到其他内容),否则应该是纯文本。标题旨在用作部分的标题,而不是使正常内容更大。我仍然不清楚这个答案对提问者有什么帮助,所以你可能想更好地解释一下,你认为plt.close()plt.close("all") 有多大不同。
      • user3666197:我已将您的评论报告给版主。我们已经谈了很多:请愿意接受对您工作的合理修改。 @Importance 提到的报价问题经常出现。如果材料来自其他地方并且你引用了一个来源,那么它就是一个引用。引用块不是一般的荧光笔设备。
      • @halfer 有问题的段落实际上引用。我花了一段时间才发现它是 pyplot 教程页面的一部分。我已经编辑了答案以明确其来源。我仍然怀疑这个答案是否有用。
      • @Importance:很好的侦查。尽管如此,来源不明的报价块具有可疑的价值,IMO。不幸的是,引用设备在这个网站上经常被误用作一般的荧光笔,我通常会取消引用它们,假设同样的事情再次发生。无论如何,读者或编辑不应该去钓鱼这种东西。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2021-05-30
      相关资源
      最近更新 更多