替换所有高于阈值的 rgb 值
Replace all rgb values above a threshold
我有一个充满 RGB 值的 numpy 3 维数组,例如
形状 = (高度,宽度,3)
matrix = np.array( [[[0,0.5,0.6],[0.9,1.2,0]])
如果任何值超过阈值,我必须替换 RGB 值,例如阈值 = 0.8,替换 = [2,2,2] 然后
matrix = [[[0,0.5,0.6],[2,2,2]]
如何使用 numpy 以高效的方式执行此操作?
目前我正在使用双 for 循环并检查是否有任何 rgb 值高于阈值,我替换它但是这对于 n = 4000 数组来说非常慢。
我如何使用 numpy 更有效地做到这一点,也许 np.where?
我已经将你的矩阵扩展了另一个 width
维度。
matrix = np.array([[[0,0.5,0.6],[0.9,1.2,0]],[[0,0.5,0.6],[0.9,1.2,0]]])
您可以在轴 2 上使用 np.any
构建遮罩(从 0 开始,因此是第三个轴):
mask = np.any((matrix > 0.8), axis=2)
# mask:
array([[False, True],
[False, True]], dtype=bool)
matrix[mask] = np.array([2,2,2])
你的结果 matrix
:
array([[[ 0. , 0.5, 0.6],
[ 2. , 2. , 2. ]],
[[ 0. , 0.5, 0.6],
[ 2. , 2. , 2. ]]])
我有一个充满 RGB 值的 numpy 3 维数组,例如 形状 = (高度,宽度,3)
matrix = np.array( [[[0,0.5,0.6],[0.9,1.2,0]])
如果任何值超过阈值,我必须替换 RGB 值,例如阈值 = 0.8,替换 = [2,2,2] 然后
matrix = [[[0,0.5,0.6],[2,2,2]]
如何使用 numpy 以高效的方式执行此操作? 目前我正在使用双 for 循环并检查是否有任何 rgb 值高于阈值,我替换它但是这对于 n = 4000 数组来说非常慢。
我如何使用 numpy 更有效地做到这一点,也许 np.where?
我已经将你的矩阵扩展了另一个 width
维度。
matrix = np.array([[[0,0.5,0.6],[0.9,1.2,0]],[[0,0.5,0.6],[0.9,1.2,0]]])
您可以在轴 2 上使用 np.any
构建遮罩(从 0 开始,因此是第三个轴):
mask = np.any((matrix > 0.8), axis=2)
# mask:
array([[False, True],
[False, True]], dtype=bool)
matrix[mask] = np.array([2,2,2])
你的结果 matrix
:
array([[[ 0. , 0.5, 0.6],
[ 2. , 2. , 2. ]],
[[ 0. , 0.5, 0.6],
[ 2. , 2. , 2. ]]])