在此代码中,有一个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