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

Numpy 看看给定坐标的点在矩阵中是否为真,numpy,matrix,indexing,selection,Numpy,Matrix,Indexing,Selection,我有一个大小为MxN的布尔型numpy矩阵。 然后我有一个行sx2的数组B,每行包含一对坐标x,y。我想找到矩阵A的坐标列表,其索引包含在数组A中,其值等于True。 我尝试使用此命令,但它返回一个三维数组,我不明白为什么: intersections = A[A[B] == True] IIUC您可以使用元组版本或切片版本索引到A和B,以获得B中有效坐标的掩码,如下所示- mask = A[tuple(B.T)] #or A[B[:,0], B[:,1]] 然后,将有效坐标索引到B中- o

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

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

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]])

添加示例案例?此外,您可能希望开始接受旧问题的解决方案,或者至少发布一些反馈。我看不到你那边有任何沟通。对于那些花时间回答你问题的人来说,这看起来不太好。效果很好!但是为什么在mask=A[tupleB.T]中需要转置呢?@user1315621如果运行该示例,您会看到元组输出为:tupleB.T=array[5,1,4,5],array[4,3,4,4],即第一个元组是行索引的元组,第二个元组是列索引的元组,本质上,我们是将每个元组索引到A的每个轴,以选择元素。