Python 使用lambda进行numpy元素转换?

Python 使用lambda进行numpy元素转换?,python,arrays,numpy,vectorization,Python,Arrays,Numpy,Vectorization,在3D numpy数组中,我需要按如下方式变换每个元素:如果小于0,则必须变为0;如果大于255,则必须变为255,否则保持不变 我怎样才能用numpy做到这一点?我在想类似的事情 img.transform_each(transform_func) 在哪里 有没有像transform_这样的构建函数? 我不知道如何手动生成循环。您可以使用将数组的值保持在特定范围内。例如: >>> a = np.array([-1, 23, 312, 47, -5]) >>>

在3D numpy数组中,我需要按如下方式变换每个元素:如果小于0,则必须变为0;如果大于255,则必须变为255,否则保持不变

我怎样才能用numpy做到这一点?我在想类似的事情

img.transform_each(transform_func)
在哪里

有没有像transform_这样的构建函数? 我不知道如何手动生成循环。

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

>>> a = np.array([-1, 23, 312, 47, -5])
>>> a.clip(0, 255)
array([  0,  23, 255,  47,   0])
返回包含值的相同形状的新数组-如果要使更改永久化或使用out参数就地执行操作,则需要将重新分配给此新数组:

np.clip(a, 0, 255, out=a)
另一种为更复杂的操作开辟道路的方法是布尔索引

例如,要将数组a中小于0的元素设置为0,请执行以下操作:

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

>>> a = np.array([-1, 23, 312, 47, -5])
>>> a.clip(0, 255)
array([  0,  23, 255,  47,   0])
返回包含值的相同形状的新数组-如果要使更改永久化或使用out参数就地执行操作,则需要将重新分配给此新数组:

np.clip(a, 0, 255, out=a)
另一种为更复杂的操作开辟道路的方法是布尔索引

例如,要将数组a中小于0的元素设置为0,请执行以下操作:


这样更好!将在7分钟内接受。但是,如果转变更为复杂呢?我相信消息来源会告诉我,但是如果你已经知道了,请也分享这个信息。很高兴这是你正在寻找的!如果这是你的意思,它会返回一个相同维度的数组-如果a是3D的,那么剪裁的数组也是。实际上不,我想问的是,如果我不需要剪裁,但是一些自定义转换,比如如果元素是5,将其替换为2,否则乘以4?啊-没有剪裁可以做到这一点,它只是将值限制在一个特定的范围内。您最好对您所描述的转换使用布尔索引。@IlyaSmagin:我已经编辑了我的答案,其中包括布尔索引的简要描述以及如何应用它。这甚至更好!将在7分钟内接受。但是,如果转变更为复杂呢?我相信消息来源会告诉我,但是如果你已经知道了,请也分享这个信息。很高兴这是你正在寻找的!如果这是你的意思,它会返回一个相同维度的数组-如果a是3D的,那么剪裁的数组也是。实际上不,我想问的是,如果我不需要剪裁,但是一些自定义转换,比如如果元素是5,将其替换为2,否则乘以4?啊-没有剪裁可以做到这一点,它只是将值限制在一个特定的范围内。您最好对您描述的转换使用布尔索引。@IlyaSmagin:我已经编辑了我的答案,其中包括布尔索引的简要说明以及如何应用布尔索引。
a[a == 2] *= 7