代码之家  ›  专栏  ›  技术社区  ›  Huanian Zhang

大整数ID匹配

  •  -2
  • Huanian Zhang  · 技术社区  · 6 年前

    我有一个十位数的ID作为我的目标,同时我有一堆ID作为我与目标的潜在配对。如果电位对不是一对,则其ID为-1;如果电位对是一对,则其ID为目标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 回复  |  直到 6 年前
        1
  •  1
  •   AGN Gazer    6 年前

    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\u电位 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()