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.txt和B.txt上傳到我的保管箱,如果有人想混淆這個數據集(每個〜300K)。預先感謝您提供的任何幫助!
編輯:我還應該提到,我需要返回的布爾數組未被排序,所以numpy的相交是不可能的。
檢查你的B數組,那裏只有35590個唯一索引。 – ngimel
啊,我知道我應該檢查一下!這就是我相信別人的軟件(輸出B)的結果。非常感謝ngimel – Robert
@ngimel你可以發表評論作爲答案... –