我正在尝试在处理后将大量文件[2000-2500]写入磁盘。我注意到前100个左右的图像快速写入磁盘,然后有一个减速。为什么会发生这种情况,我该怎么做才能加快这个过程?
这是我编写图像的代码:
for b in range(Data.shape[1]):
t0 = time.clock()
img = Data[:,b]
img = np.reshape(img,(501,501))
save = os.path.join(savedir,"%s_%s"%(item,b))
plt.imshow(img).figure.savefig(save)
print "Saved %s of %s in %s seconds"%(b,Data.shape[1],time.clock()-t0)
编辑:
Saved 0 of 1024 in 0.103277 seconds
Saved 1 of 1024 in 0.0774039999999 seconds
Saved 2 of 1024 in 0.0883339999998 seconds
Saved 3 of 1024 in 0.0922500000001 seconds
Saved 4 of 1024 in 0.0972509999999 seconds
经过几次迭代后:
Saved 1018 of 1024 in 2.152941 seconds
Saved 1019 of 1024 in 2.163633 seconds
Saved 1020 of 1024 in 2.198959 seconds
Saved 1021 of 1024 in 2.172303 seconds
Saved 1022 of 1024 in 2.19014 seconds
Saved 1023 of 1024 in 2.203727 seconds
答案 0 :(得分:2)
每次使用plt.imshow
时,都会创建一个新的AxesImage
,每个都占用一些内存。为了加快速度,您可以在每次保存后清除图clf()
。
您可以使用len(plt.gca().images)
查看此内容,了解您已打开的图片数量。如果没有clf()
行,您将看到每次迭代的数量增加1。
for b in range(Data.shape[1]):
img = Data[:,b]
img = np.reshape(img,(501,501))
print "Saving %s of %s"%(b,Data.shape[1])
save = os.path.join(savedir,"%s_%s"%(item,b))
plt.imshow(img).figure.savefig(save)
print "There are %d image(s) open"%len(plt.gca().images)
plt.gcf().clf() # clear the figure