繁体   English   中英

为什么python中的此循环运行速度越来越慢?

[英]Why does this loop in python runs progressively slower?

在此代码中,有一个13D13图像的4维数组。 我想使用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小时! 而且我注意到它的运行速度似乎越来越慢。

您在这里遇到的是内存泄漏:您一直在创建AxesImage对象的实例(通过重复调用plt.imshow )直到它们无法放入RAM plt.imshow 然后整个事情开始交换到磁盘上,这非常慢。 为了避免内存泄漏,您可以在AxesImage时销毁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)
        ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM