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

在此代码中,有一个13×13图像的4-D阵列.我想使用matplotlib.pyplot保存每个13×13图像.这里出于调试目的,我将外部循环限制为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的那一刻;然后整个事情开始交换到磁盘,这非常慢.为避免内存泄漏,您可以在不需要时销毁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)

...

标签:python,matplotlib

来源: https://codeday.me/bug/20190519/1136426.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值