我有一个奇怪的问题发生与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吗?如果有人想弄乱这个数据集(每个〜300K),我已经将A.txtB.txt上传到我的保管箱。在此先感谢您提供的任何帮助!

编辑:我还应该提到,我需要返回的布尔数组是未排序的,所以numpy的相交是不可能的。

最佳答案

检查您的B数组,那里只有35590个唯一索引。

10-02 14:44