Matplotlib直方图中的内存泄漏

3
运行以下代码将导致内存使用快速增加。
import numpy as np
import pylab as p
mu, sigma = 100, 15
x = mu + sigma*np.random.randn(100000)
for i in range(100):
    n, bins, patches = p.hist(x, 5000)

然而,当用直接调用numpy的直方图方法替换pylab调用时,内存使用量保持不变(而且运行速度显著提高)。
import numpy as np
mu, sigma = 100, 15
x = mu + sigma*np.random.randn(100000)
for i in range(100):
    n, bins = np.histogram(x, 5000)

我曾认为pylab使用的是numpy直方图函数。一定有某个地方出现了bug...

1
如果你真的想在循环中绘制直方图,那么你必须清除你的图表:https://dev59.com/E2sy5IYBdhLWcg3w8Slc。此外,如果你使用的是2.x版本的Python,则需要进行垃圾回收。但我猜你并不想画直方图。 - theta
谢谢!我尝试过使用gc.collect(),但没有成功,不过在循环内部添加clf()就解决了问题!(你说得没错,我并不想绘制直方图 - 我只想使用这个功能) - schubnel
1个回答

2

Matplotlib 生成图表,而 NumPy 不会。在你的第一段代码中添加 p.show() 可以查看工作进展。

import numpy as np
import pylab as p
mu, sigma = 100, 15
x = mu + sigma*np.random.randn(100000)
n, bins, patches = p.hist(x, 5000)
p.show()

您可以先尝试使用较小的数字np.random.randn(100000),以快速查看结果。

编辑

创建相同的绘图100次并没有太大意义。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接