Python 大整数ID匹配

Python 大整数ID匹配,python,numpy,match,Python,Numpy,Match,我有一个十位数的ID作为我的目标,同时我有一堆ID作为我与目标的潜在配对。如果不是对,则潜在对的ID为-1;如果是对,则为目标ID。比如说, ID_target = 1234567890 ID_potential = np.array([-1, -1, 1234567890, -1, -1, 1234567890, -1, 1234567890, -1, -1, -1, -1]) 我们很容易看出有三对。但是,如何查找对并返回对的索引?我尝试了以下操作,但失败了: np.where(ID_

我有一个十位数的ID作为我的目标,同时我有一堆ID作为我与目标的潜在配对。如果不是对,则潜在对的ID为-1;如果是对,则为目标ID。比如说,

 ID_target = 1234567890
 ID_potential = np.array([-1, -1, 1234567890, -1, -1, 1234567890, -1, 1234567890, -1, -1, -1, -1])
我们很容易看出有三对。但是,如何查找对并返回对的索引?我尝试了以下操作,但失败了:

 np.where(ID_potential == ID_target)
它应返回以下索引:

 pair_index = [2,5,7]

我也不太明白上面的命令没有做正确的事情。

基于@COLDSPEED注释。将
ID\u电势的转换更改为
numpy
数组:

>>> np.flatnonzero(np.asarray(ID_potential) == ID_target).tolist()
[2, 5, 7]
另一个版本:

>>> np.where(np.equal(ID_potential, ID_target))[0].tolist()
如果这在实际代码中不起作用,则很可能在实际代码/数据中的
ID\u potential
ID\u target
之间存在类型不匹配,或者某些数据是浮点数据,因此可能无法保持严格的相等性。在这种情况下,请使用
numpy.isclose()

为了使代码更能适应错误,请尝试以下版本:

np.where(np.equal(np.asarray(ID_potential, dtype=np.int), np.int(ID_target)))[0].tolist()
或者,如果值实际上是
float
-将上面的
np.int
替换为
np.float
,将
np.equal
替换为
np.isclose()


np.flatnonzero(ID\u电势==ID\u目标)
@cᴏʟᴅsᴘᴇᴇᴅ 谢谢你的评论,我尝试了这个命令,但是它返回了一些错误,上面说
AttributeError:'bool'对象没有属性'ravel'
。。。那么
np.argwhere(ID\u potential==ID\u target.ravel()
?ID\u potential
实际上是一个numpy数组吗?尝试
np.where(np.array(ID\u potential)=ID\u target)
…我认为您得到该AttributeError的原因是列表只是与整数进行比较,得出
False
,然后您试图用
False
创建一个扁平数组,这是不可能的。@HuanianZhang哪个版本适合您?实际问题在哪里?
np.where(np.isclose(np.asarray(ID_potential, dtype=np.float), np.float(ID_target)))[0].tolist()