如何为2d NumPy数组中的nd值创建掩码?

时间:2019-05-12 00:36:02

标签: arrays numpy mask

如果我想根据2d数组中的1d值创建遮罩:

a = np.array([[3, 5], [7, 1]])
threshold = 2
mask = a > threshold
print(a)
print(mask)

我得到:

[[3 5]
 [7 2]]
[[ True  True]
 [ True False]]

如何为具有nd值的2d数组创建这样的蒙版?类似于以下2d数组中2d值和2d阈值的示例:

b = np.array([[[1, 5], [3, 5]], [[4, 4], [7, 2]]])
threshold = 2, 4
print(b)

看起来像这样:

[[[1 5]
  [3 5]]

 [[4 4]
  [7 2]]]

[1, 5][3, 5][4, 4][7, 2]是示例性2d值。在threshold中设置的阈值,第一个值为2,第二个值为4

    [1, 5]False起,1 > 2 == False
  • 单元格应为5 > 4 == True
  • [3, 5]True起,3 > 2 == True
  • 单元格应为5 > 4 == True
  • [4, 4]False起,4 > 2 == True
  • 单元格应为4 > 4 == False
  • [7, 2]False起,7 > 2 == True
  • 单元格应为2 > 4 == False

我该怎么做才能得到相应的口罩?

[[ False  True]
 [ False False]]

1 个答案:

答案 0 :(得分:2)

numpy广播比较实际上为您很好地解决了这一问题。只需将threshold设置为1D数组,然后沿最终轴声明all

t = np.array([2, 4])

(b > t).all(-1)

array([[False,  True],
       [False, False]])

但是要澄清一下,您的数组实际上是3D。如果您的数组是2D,如下所示,则工作方式会有所不同:

arr = np.array([[1, 5],
                [3, 5],
                [4, 4],
                [7, 2]])

(arr > t).all(-1)

array([False,  True, False, False])