Python 双循环 lambda
Python lambda with double loops
是否可以将以下代码重写为lambda表达式?
for h in range(height):
for w in range(width):
if maskImg[h][w] > 0:
maskImg[h][w] = srcImg[h][w]
这实际上并不等同于您的表达式,因为它不是就地的,但是您可以使用类似以下内容获得相同的结束矩阵:
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 来处理这些事情。假设您的 src
和 mask
存储在 Python-lists 中,您会得到相同的结果,速度更快:
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 倍。
是否可以将以下代码重写为lambda表达式?
for h in range(height):
for w in range(width):
if maskImg[h][w] > 0:
maskImg[h][w] = srcImg[h][w]
这实际上并不等同于您的表达式,因为它不是就地的,但是您可以使用类似以下内容获得相同的结束矩阵:
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 来处理这些事情。假设您的 src
和 mask
存储在 Python-lists 中,您会得到相同的结果,速度更快:
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 倍。