查看给定坐标处的点在矩阵中是否为真

Look if points at given coordinates are True in a matrix

我有一个大小为 MxN 的 bool 类型的 numpy 矩阵 A。 比起我有一个 ROWSx2 的数组 B,它在每一行中包含一对坐标 x、y。我想找到矩阵 A 的坐标列表,其索引包含在数组 A 中并且其值等于 True。 我尝试使用此命令,但它 returns 是一个 3 维数组,我不明白为什么:

intersections = A[A[B] == True]

IIUC 你可以用元组版本或切片版本索引到 AB 以获得 B 中有效坐标的掩码,就像这样 -

mask = A[tuple(B.T)] #or A[B[:,0], B[:,1]]

然后,将有效坐标索引到B -

out = B[mask]

样本运行-

In [43]: A
Out[43]: 
array([[False,  True,  True,  True,  True],
       [ True,  True,  True, False,  True],
       [False, False, False,  True, False],
       [ True,  True,  True, False,  True],
       [False,  True, False,  True,  True],
       [False,  True,  True,  True,  True]], dtype=bool)

In [44]: B
Out[44]: 
array([[5, 4],
       [1, 3],
       [4, 4],
       [5, 4]])

In [45]: mask = A[tuple(B.T)]

# Mask of valid B coordinates
In [47]: mask
Out[47]: array([ True, False,  True,  True], dtype=bool)

In [46]: B[mask]
Out[46]: 
array([[5, 4],  # [1,3] gone because A[1,3] = False
       [4, 4],
       [5, 4]])