在 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])
返回一个包含值的相同形状的新数组 - 如果您想使更改永久生效,则需要将 a
重新分配给这个新数组,否则使用 out
执行操作的参数:
np.clip(a, 0, 255, out=a)
另一种为更复杂的操作开辟道路的方法是 bool 索引的思想。
例如,将数组a
中小于0
的元素设置为0
:
a[a < 0] = 0
或者将2
的所有值乘以7
,你可以这样写:
a[a == 2] *= 7
关于python - 使用 lambda 进行 numpy 元素转换?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29015556/