大整数ID匹配

时间:2017-11-02 00:24:28

标签: 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_potential == ID_target)

它应该返回以下索引:

 pair_index = [2,5,7]

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

1 个答案:

答案 0 :(得分:1)

基于@COLDSPEED评论。已将ID_potential转换为numpy数组:

>>> np.flatnonzero(np.asarray(ID_potential) == ID_target).tolist()
[2, 5, 7]

另一个版本:

>>> np.where(np.equal(ID_potential, ID_target))[0].tolist()

如果这在您的实际代码中不起作用,则很可能在您的实际代码/数据中ID_potentialID_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.where(np.isclose(np.asarray(ID_potential, dtype=np.float), np.float(ID_target)))[0].tolist()