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

时间:2017-11-18 03:56:18

标签: numpy matrix indexing selection

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

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

1 个答案:

答案 0 :(得分:1)

IIUC您可以使用A使用元组版本或切片版本索引B以获取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]])