簡體   English   中英

為什么python中的此循環運行速度越來越慢?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM