python雙重for迴圈優化方法。

2021-10-24 03:12:17 字數 1580 閱讀 3685

用python做影象處理。有些特殊需求需要用雙重for迴圈遍歷影象來操作例如下面**

def getbinarizationimg(simg, targeth, targetw):

print(simg.shape)

h,w,c = simg.shape

box = np.zeros((h, w),dtype=np.uint8)

pole = np.zeros((h, w),dtype=np.uint8)

for u in range(h):

for v in range(w):

if simg[u][v][0] == 0 and simg[u][v][1] == 220 and simg[u][v][2] == 220:

box[u][v] = 255

img_box = cv2.resize(box, (targetw, targeth), fx=0, fy=0,

interpolation=cv2.inter_nearest)

return img_box

影象大小為1024 * 2048 .主函式中測試結果如下

elapse_time =  3.5969557762145996

elapse_time = 3.608659029006958

elapse_time = 3.667614459991455

elapse_time = 3.546481132507324

直接瘋掉的節奏啊。後來看到kcf演算法中有個加速方法,拿來用用

from numba import jit

@jit()

def getbinarizationimg(simg, targeth, targetw):

print(simg.shape)

h,w,c = simg.shape

box = np.zeros((h, w),dtype=np.uint8)

pole = np.zeros((h, w),dtype=np.uint8)

for u in range(h):

for v in range(w):

if simg[u][v][0] == 0 and simg[u][v][1] == 220 and simg[u][v][2] == 220:

box[u][v] = 255

img_box = cv2.resize(box, (targetw, targeth), fx=0, fy=0,

interpolation=cv2.inter_nearest)

return img_box

elapse_time =  0.29776477813720703

elapse_time = 0.0017366409301757812

elapse_time = 0.001975536346435547

elapse_time = 0.001725912094116211

elapse_time = 0.0018794536590576172

效能差不少啊。

雙重for迴圈的優化

demo如下 public class testm private static void aaa system.out.println system.currenttimemillis s private static void bbb system.out.println system.curr...

雙重for迴圈

雙重for迴圈就是在乙個for迴圈裡在巢狀另乙個for迴圈,ji 即兩個迴圈巢狀,還有多重迴圈巢狀的情況,但用的比較少,一般常用的是兩個迴圈巢狀,很少使用多重迴圈,因為for迴圈多了會導致 執行的效率低,而且容易宕機,多迴圈中的總迴圈次數是相乘的,巢狀幾次後幾何級數增長,因此通常情況下在迴圈多次巢狀...

雙重for迴圈

雙重for迴圈 1 概述 很多情況下,單層for迴圈並不能滿足我們的需求,比如我們要列印乙個5行5列的圖形,列印乙個倒直角三角形等,此時就可以通過迴圈巢狀來實現 迴圈巢狀是指在乙個迴圈語句中再定義乙個迴圈語句的語法結構,例如在for迴圈語句中,可以再巢狀乙個for迴圈,這樣的for迴圈語句我們稱之為...