python - numpy in1d 返回不正确的结果?

标签 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 的相交是不可能的。

最佳答案

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

关于python - numpy in1d 返回不正确的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19599818/

相关文章:

php - 从 PHP 中的数组中获取连续输赢

arrays - 如何最大化总分?

c - 数组值未按预期显示

python - python 中的数学公式不起作用

python - SciPy curve_fit with np.log 立即返回 popt = p0, pcov = inf

python - 某些(但不是全部):not(. ..)CSS 选择器上的 Selenium(通过 Python)错误

python - graphlab create sframe 如何获取 SArray 中位数

Python - for 循环内的 if 和 else 且 count 不起作用

python - 将函数应用于numpy中向量中的每个元素

python - 如何验证使用随机函数的正确性?