2013-10-25 143 views
2

我有一個奇怪的問題發生在numpy的in1d函數中。我有兩個表示粒子ID的整數值數組,如A & B(ID對每個粒子都是唯一的)。數組A包含所有粒子的列表,數組B包含屬於一個組的所有粒子的列表(B中的所有粒子也都在A中)。我試圖得到的是數組A中所有分組粒子的索引,但由於某些原因,numpy的in1d沒有返回正確的結果。下面是一個例子:numpy in1d返回不正確的結果?

A = all particle IDs (length of 54480) 
B = all grouped particle IDs (length of 48061) 

蠻力搜索表明,乙內的所有粒子的ID不存在於A.我還可以這樣做:

matches = np.in1d(B,A) 
print len(np.where(matches==True)[0]) 
>> 48061 

驗證B的所有元素存在在A.現在奇怪的部分是,如果我做

matches = np.in1d(A,B) 
print len(np.where(matches==True)[0]) 
>> 35590 

我得到一些意想不到的東西。難道這不應該返回48061真和6419假嗎?我已經將A.txtB.txt上傳到我的保管箱,如果有人想混淆這個數據集(每個〜300K)。預先感謝您提供的任何幫助!

編輯:我還應該提到,我需要返回的布爾數組未被排序,所以numpy的相交是不可能的。

+3

檢查你的B數組,那裏只有35590個唯一索引。 – ngimel

+0

啊,我知道我應該檢查一下!這就是我相信別人的軟件(輸出B)的結果。非常感謝ngimel – Robert

+0

@ngimel你可以發表評論作爲答案... –

回答

1

檢查你的B數組,那裏只有35590個唯一索引。