我的目标有一个十位数的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]
我也不太明白上面的命令没有做正确的事情。
答案 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_potential
和ID_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()