Numpy 看看给定坐标的点在矩阵中是否为真
我有一个大小为MxN的布尔型numpy矩阵。 然后我有一个行sx2的数组B,每行包含一对坐标x,y。我想找到矩阵A的坐标列表,其索引包含在数组A中,其值等于True。 我尝试使用此命令,但它返回一个三维数组,我不明白为什么: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
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的每个轴,以选择元素。