【问题标题】:How to find and pull values at specific indices of several Numpy arrays?如何在几个 Numpy 数组的特定索引处查找和提取值?
【发布时间】:2020-07-17 19:58:19
【问题描述】:

我有一个特定值的一维 numpy 数组:

array_1 = [1.0, 3.0, 7.0, 9.0, 6.0]

这些值可以在第二个 1D numpy 数组中以不同的索引找到:

array_2 = [0.0, 1.0, 12.0, 16.0, 3.0, 7.0, 25.0, 9.0, 1.0, 4.0, 6.0]

我想根据 array_2 中 array_1 中给出的值的位置从第三个 1D numpy 数组中提取值,该数组的大小与 array_2 相同:

array_3 = [123.6, 423.4, 12.4, 14.5, 25.6, 67.8, 423.5, 52.3, 32.4, 87.9, 78.1]

因此,在上面的示例中,因为 array_1 的值在 array_2 的以下位置找到: [0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1]

因此,我想从 array_3 中提取相同索引中的值。换句话说,我想留下以下array_4:

array_4 = [423.4, 25.6, 67.8, 52.3, 78.1]

最好的方法是什么?

【问题讨论】:

  • 1.0array_2 中出现两次。是故意的吗?

标签: python arrays numpy indices


【解决方案1】:

你可以试试np.intersect1d:

_,_,idx = np.intersect1d(array_1, array_2, return_indices=True)
out = np.array(array_3)[sorted(idx)]

输出out:

array([423.4,  25.6,  67.8,  52.3,  78.1])

【讨论】:

    【解决方案2】:

    一种非numpy方式是

    array_4 = []
    for i in range(len(array_2)):
        if array_2[i] in array_1:
            array_4.append(array_3[i])
    print(array_4)
    

    【讨论】:

      【解决方案3】:

      这是另一种方法:

      indexes = np.where(array_2 == array_1[:,np.newaxis])
      
      array_4 = array_3[indexes[1]]
      print(array_4)
      

      结果:

      [423.4  32.4  25.6  67.8  52.3  78.1]
      

      【讨论】:

        【解决方案4】:

        使用np.unique

        unq,idx,inv = np.unique(np.concatenate([array_2,array_1]),return_index=True,return_inverse=True)
        poss = idx[inv[len(array_2):]]
        np.array(array_3)[poss]
        # array([423.4,  25.6,  67.8,  52.3,  78.1])
        

        【讨论】:

          猜你喜欢
          • 2016-01-05
          • 1970-01-01
          • 2022-01-17
          • 2016-12-05
          • 2019-02-06
          相关资源
          最近更新 更多