如果我想根据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]]
答案 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])