[英]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.