2016-02-26 223 views
2

我試圖用二維數組上的視圖intersect1d函數來找到它的第一列與另一個1D數組的交集,維護其最終結果中的第二列。不過,我試圖構建視圖卡住了。Python的Numpy intersect1d與一維數組與二維數組

示例輸入:

a1 = np.array([[1,2],[3,4],[4,9]], dtype=np.uint32) 
a2 = np.array([8,3,8,1,0,9,3,2], dtype=np.uint32) 

期望的結果是:

[[1,2],[3,4]] 
+0

的〔np.intersect1d]的文檔(http://docs.scipy.org/doc /numpy-1.10.1/reference/generated/numpy.intersect1d.html)並沒有提供關於多維數組的任何信息(儘管它仍然返回一個結果,而沒有引發任何錯誤或折舊警告......)。但是,這不是你期望的結果。 – Emilien

回答

3

理想情況下,希望有的行指數或交叉那些的掩模。現在np.intersect1d實際上也不會給你。要解決這個問題,你可以使用np.in1d來獲取相交行的蒙版。因此,索引與這將是所需輸出,像這樣 -

a1[np.in1d(a1[:,0],a2)] 

樣品運行 -

In [15]: a1 
Out[15]: 
array([[1, 2], 
     [3, 4], 
     [4, 9]], dtype=uint32) 

In [16]: a2 
Out[16]: array([8, 3, 8, 1, 0, 9, 3, 2], dtype=uint32) 

In [17]: np.in1d(a1[:,0],a2) # Intersecting rows mask for a1 
Out[17]: array([ True, True, False], dtype=bool) 

In [18]: a1[np.in1d(a1[:,0],a2)] 
Out[18]: 
array([[1, 2], 
     [3, 4]], dtype=uint32) 
+0

嗨,謝謝你的建議。這給了我一個更大的數據集上的以下錯誤:IndexError:太多索引 – tdma

+0

@tdma因此,在你的大案例中 - 是'a1'是2D數組,'a2'是一維數組嗎? – Divakar

+0

肯定的,在a1中只有更多的行(或者如果你想要的話)完全一樣的結構。它在a1中大約100萬對/行後開始失敗。 – tdma