我试图在处理后将大量文件[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
最佳答案
每次使用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