三行代码  ›  专栏  ›  技术社区  ›  D_C

使用numpy中测试数组的匹配值查找数组中所有元素的索引位置

  •  1
  • D_C  · 技术社区  · 4 天前

    我有一个numpy数组,如:

    a = np.array([[1, 2, 3, 456], [2, 3, 4, 789], [3, 4, 5, 101112], [4, 5, 6, 131415]])
    

    我有一系列数字,如:

    b = np.array([101112, 456])
    

    [2, 0]
    

    目前,我使用的是嵌套循环,效率非常低。

    至少在我有限的理解下,我不知道该在哪里做这件事。

    2 回复  |  直到 4 天前
        1
  •  3
  •   Mark    4 天前

    a = np.array([[1, 2, 3, 456], [2, 3, 4, 789], [3, 4, 5, 101112], [4, 5, 6, 131415]])
    b = np.array([101112, 456])
    
    np.isin(a, b)
    

    并获得:

    array([[False, False, False,  True],
           [False, False, False, False],
           [False, False, False,  True],
           [False, False, False, False]])
    

    any() 然后去 argwhere 将给您一行:

    np.argwhere(np.any(np.isin(a, b), axis=1)).ravel()
    # array([0, 2])
    
        2
  •  2
  •   azro    4 天前

    np.where b

    import numpy as np
    
    a = np.array([[1, 2, 3, 456], [2, 3, 4, 789], 
                  [3, 4, 5, 101112], [4, 5, 6, 131415]])
    b = np.array([101112, 456])
    print([np.where(a == v)[0][0] for v in b])  # [2, 0]