我有一個大小爲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