我有一个大小为MxN的布尔类型的numpy矩阵A. 比我有一个数组B的ROWSx2在每一行中包含一对坐标x,y。我想找到索引包含在数组A中且其值等于True的矩阵A的坐标列表。 我尝试用这个命令,但它返回一个3D立体阵列,我不明白为什么:查看给定坐标上的点是否为矩阵
intersections = A[A[B] == True]
我有一个大小为MxN的布尔类型的numpy矩阵A. 比我有一个数组B的ROWSx2在每一行中包含一对坐标x,y。我想找到索引包含在数组A中且其值等于True的矩阵A的坐标列表。 我尝试用这个命令,但它返回一个3D立体阵列,我不明白为什么:查看给定坐标上的点是否为矩阵
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 [tuple(B.T)]中需要转置? – user1315621
@ user1315621如果运行该示例,则会看到元组输出为:tuple(BT)=(array([5,1,4,5]),array([4,3,4,4])) ',即第一个元组是行索引的元组,第二个元组是col索引,实质上,我们用每个元组索引到'A'的每个轴,以选择元素。 – Divakar
添加样品盒? – Divakar
此外,您可能想开始接受您的旧问题的解决方案,或至少发布对他们的某种反馈。我没有看到你方的任何沟通。对于那些花时间回答你的问题的人来说,这看起来不太好。 – Divakar