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 来处理这些事情。假设您的 srcmask 存储在 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 倍。