使用 lambda 进行 numpy 元素转换?

numpy element transformation with lambda?

在3D numpy数组中,我需要对每个元素进行如下变换:如果小于0,则必须变为0,如果大于255,则必须变为255,否则保持原样.

如何使用 numpy 实现该目标?我在想

img.transform_each(transform_func)

哪里

def transform_func(x):
    if x<0:
        return 0;
    # etc

是否有类似 transform_each 的构建函数? 我不知道如何手动进行 for-for-for 循环。

您可以使用 clip 将数组的值保持在特定范围内。例如:

>>> a = np.array([-1, 23, 312, 47, -5])
>>> a.clip(0, 255)
array([  0,  23, 255,  47,   0])

returns 一个包含值的相同形状的新数组 - 如果您想使更改永久生效,则需要将 a 重新分配给这个新数组,否则使用 out参数到位执行操作:

np.clip(a, 0, 255, out=a)

另一种为更复杂的操作开辟道路的方法是布尔索引的思想。

例如,将数组a中小于0的元素设置为0

a[a < 0] = 0

或者将2的所有值乘以7,你可以这样写:

a[a == 2] *= 7