2015-04-01 41 views
1

是否可以將以下代碼重寫爲lambda表達式?帶雙環的Python lambda

for h in range(height): 
    for w in range(width): 
     if maskImg[h][w] > 0: 
      maskImg[h][w] = srcImg[h][w] 
+2

你爲什麼想要? – tzaman 2015-04-01 05:55:28

+0

@tzaman加快速度? – Ovilia 2015-04-01 05:58:44

+1

Lambda表達式通常不會讓事情變得更快。 – tzaman 2015-04-01 06:01:45

回答

4

這是不是真的等同於你,因爲這種表達不到位,但你使用類似達到同樣的矩陣:

lambda_function = lambda height, width, src, mask: [[src[h][w] if mask[h][w] > 0 else mask[h][w] for w in range(width)] for h in range(height)] 

但我不會建議使用它,永遠。如果你在追趕速度,你應該使用Numpy這些東西。假設你srcmask存儲在Python的名單,你會得到相同的結果太多,要快得多做:

import numpy as np 
src_np = np.array(src) 
mask_np = np.array(mask) 
mask_np[mask_np > 0] = src_np[mask_np > 0] 

這在我的電腦上是比〜你的解決方案快50倍。

+0

謝謝!它有很多幫助。 – Ovilia 2015-04-01 08:42:11