筛选numpy数组基1-0掩码

pkmbmrz7  于 2023-01-17  发布在  其他
关注(0)|答案(2)|浏览(129)

假设我有一个shape的numpy ndarray(172,40,20)和一个shape的1-0掩码(172,40),我想做类似于bitwise_and的操作:以保持掩码值为1的那些值,而在掩码值为0的情况下将其它值设置为0。
有没有一种方法可以不用循环?例如

a3D = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
print(a3D.shape)
mask = np.array([[1, 0], [0, 1]])
print(mask.shape)
# (2, 2, 2)
# (2, 2)

# my func
result = bitwise_and(a3D, mask) 

# result = np.array([[[1, 2], [0, 0]], [[0, 0], [7, 8]]])
kknvjkwl

kknvjkwl1#

您可以使用np.where()

np.where(mask[:, :, np.newaxis], a3D, 0)
[[[1 2]
  [0 0]]

 [[0 0]
  [7 8]]]
6yjfywim

6yjfywim2#

只需使用掩码作为布尔索引来索引数组:

result = a3D.copy()
result[mask == 0, :] = 0
print(result)

产出

[[[1 2]
  [0 0]]

 [[0 0]
  [7 8]]]

相关问题