使用 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
在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