numpy in1d返回不正确的结果?

时间:2013-10-25 21:38:19

标签: python arrays numpy

我在numpy的in1d函数中遇到了一个奇怪的问题。我有两个表示粒子ID的整数值数组,例如A& B(ID对每个粒子都是唯一的)。数组A包含所有粒子的列表,数组B包含属于一个组的所有粒子的列表(B中的所有粒子也在A中)。我想要得到的是数组A中所有分组粒子的索引,但由于某种原因,numpy的in1d没有返回正确的结果。这是一个例子:

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

强力搜索显示B中的所有粒子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 True和6419 False?我已将A.txtB.txt上传到我的保管箱,如果有人想要弄乱这个数据集(每个约300K)。提前感谢您提供的任何帮助!

编辑:我还应该提一下,我需要返回的bool数组是未分类的,所以numpy的相交是不可能的。

1 个答案:

答案 0 :(得分:1)

检查你的B阵列,那里只有35590个唯一索引。