根据3D numpy数组中的维度来选择数值。

问题描述 投票:0回答:1

我有多个二进制分割掩模。它们组合在一起会形成一个3D阵列。如果你把一个像素在第三维度上相加,它应该加起来就是 1即一个像素应该只有一个 1 贯穿其3维。

[[0, 0],
 [1, 0]],

[[1, 1],
 [0, 1]]

不幸的是,我的3D数组没有这个条件。

[[0, 0],
 [1, 1]],

[[1, 0],
 [1, 0]],

[[1, 1],
 [1, 0]]

正如我们看到的 2,1 在三个通道中都相等。

我想把低通道的值设置为 0 如果在上级部门 1 存在.如何才能实现第二个例子中的数组结果是这样的。

[[0, 0],
 [0, 1]],

[[0, 0],
 [0, 0]],

[[1, 1],
 [1, 0]]
python arrays numpy multidimensional-array
1个回答
0
投票

这很简单,使用 Numpy的高级索引:

import numpy as np

img = np.array([[[0, 0],
                 [1, 1]],
                [[1, 0],
                 [1, 0]],
                [[1, 1],
                 [1, 0]]])

print(img)

print(np.sum(img, axis=2))

# check for ones in the first position in the third axis  
# and get a mask for boolean indexing  
mask = img[:, :, 0] == 1

print(mask)
img_2 = img.copy()

# apply the mask to the second element in the third axis
# and set the values to zero there IF there was a one
# in the other place: when the boolean mask is True
img_2[:,:,1][mask] = 0 

print(img_2)

print(np.sum(img_2, axis=2))
© www.soinside.com 2019 - 2024. All rights reserved.