我想在我的算法中編寫一段嵌套循環,並且遇到一些由於嵌套循環而導致整個算法花費太長時間的問題。我對Python很陌生(正如你可能從我的下面非專業代碼:()中找到的,希望有人能指導我加速我的代碼的方法!如何加快Python中的嵌套循環
整個算法用於多1500 * 6400陣列,當通過整個數組時,應用一個小的上下文分析,上下文分析以動態分配的窗口大小的方式執行,窗口大小可以從11 * 11到31 * 31,直到採樣窗口內的有效值足夠大爲下一輪計算,例如象下面這樣:
def ContextualWindows (arrb4,arrb5,pfire):
####arrb4,arrb5,pfire are 31*31 sampling windows from large 1500*6400 numpy array
i=5
while i in range (5,16):
arrb4back=arrb4[15-i:16+i,15-i:16+i]
## only output the array data when it is 'large' enough
## to have enough good quality data to do calculation
if np.ma.count(arrb4back)>=min(10,0.25*i*i):
arrb5back=arrb5[15-i:16+i,15-i:16+i]
pfireback=pfire[15-i:16+i,15-i:16+i]
canfire=0
i=20
else:
i=i+1
###unknown pixel: background condition could not be characterized
if i!=20:
canfire=1
arrb5back=arrb5
pfireback=pfire
arrb4back=arrb4
return (arrb4back,arrb5back,pfireback,canfire)
然後這個動態窗口將被進給到下一輪試驗中,例如:
b4backave=np.mean(arrb4Windows)
b4backdev=np.std(arrb4Windows)
if b4>b4backave+3.5*b4backdev:
firetest=True
要運行整個代碼到我的多1500 * 6400 numpy陣列,它花了半小時甚至更長的時間。想知道是否有人知道如何處理它?我應該努力的一部分的一般想法將會非常有幫助!
非常感謝!
可能會更好[codereview](http://codereview.stackexchange.com/)? – hd1 2015-04-05 16:24:18
不是複雜性的改變,但我會使用'while 5 <= i <16' – 2015-04-05 16:40:49
你也可以改變它爲for循環和break,else else i = 20然後顛倒測試...有沒有嵌套循環,只是很多切片,numpy應該創建視圖,所以不應該那麼慢。 – AChampion 2015-04-05 16:44:59