2017-11-18 99 views
0

我有一個大小爲MxN的布爾類型的numpy矩陣A. 比我有一個數組B的ROWSx2在每一行中包含一對座標x,y。我想找到索引包含在數組A中且其值等於True的矩陣A的座標列表。 我嘗試用這個命令,但它返回一個3D立體陣列,我不明白爲什麼:查看給定座標上的點是否爲矩陣

intersections = A[A[B] == True] 
+0

添加樣品盒? – Divakar

+1

此外,您可能想開始接受您的舊問題的解決方案,或至少發佈對他們的某種反饋。我沒有看到你方的任何溝通。對於那些花時間回答你的問題的人來說,這看起來不太好。 – Divakar

回答

1

IIUC可以索引到AB有一個元組版本或切片版本,以獲得的面具在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]]) 
+0

非常棒!但爲什麼mask = A [tuple(B.T)]中需要轉置? – user1315621

+0

@ user1315621如果運行該示例,則會看到元組輸出爲:tuple(BT)=(array([5,1,4,5]),array([4,3,4,4])) ',即第一個元組是行索引的元組,第二個元組是col索引,實質上,我們用每個元組索引到'A'的每個軸,以選擇元素。 – Divakar