为什么python中的循环运行速度逐渐变慢?

时间:2015-10-28 08:14:16

标签: python matplotlib

在此代码中,有一个13x13图像的4-D阵列。我想使用 matplotlib.pyplot 保存每个13x13图像。这里出于调试目的,我将外部循环限制为1.

#fts is a numpy array of shape (4000,100,13,13)
no_images = 4000
for m in [1]:  
    for i in range(no_images):
        print i,
        fm = fts[i][m]
        if fm.min() != fm.max():
            fm -= fm.min()
            fm /= fm.max()  #scale to [0,1]
        else:
            print 'unscaled'
        plt.imshow(fmap)
        plt.savefig('m'+str(m)+'_i'+str(i)+'.png')

保存4000张图片需要20多个小时。为什么这么慢? 如果我将内循环限制为前100个图像,则大约需要1分钟。所以整件事应该在40分钟内完成,而不是超过20个小时!而且我注意到它似乎逐渐变慢。

1 个答案:

答案 0 :(得分:5)

您在这里遇到的是内存泄漏:您不断创建AxesImage个对象的实例(通过重复调用plt.imshow)到它们无法放入RAM的那一刻;然后整个事情开始交换到磁盘,这是令人难以置信的慢。为避免内存泄漏,您可以在不需要时销毁AxesImage实例:

...
image = plt.imshow(fmap)
plt.savefig('m'+str(m)+'_i'+str(i)+'.png')
del(image)

或者,您只能创建一个AxesImage,然后只需更改其中的数据:

...
image = None
for m in [1]:  
    for i in range(no_images):
        ...
        if image is None:
             image = plt.imshow(fmap)
        else:
             image.set_data(fmap)
        ...