【问题标题】:Extracting certain indices from a numpy matrix [duplicate]从numpy矩阵中提取某些索引[重复]
【发布时间】:2018-05-20 13:32:13
【问题描述】:

我有一个值矩阵和一个索引数组,我想遍历矩阵的每一行,只取与我的索引数组中的索引对应的值。

所以对于矩阵中的第 1 行,我取数组中第一个元素对应的值。

Mat = [[0. 4. 4. 4.]
      [2. 8. 8. 2.]
      [7. 7. 7. 7.]
      ...
      [5. 5. 5. 5.]
      [7. 7. 7. 7.]
      [2. 6. 6. 6.]]

arr = [0 0 3 ... 0 0 3]

所以我想要第一行的第 0 个值,第二行的第 0 个值,依此类推,我想将其保存在最后的向量中。

np.take(Mat,arr,axis=1,out=y)

但这不起作用,我得到一个矩阵而不是向量。任何帮助将不胜感激。

谢谢

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    这可以使用choose 方法来完成:

    np.choose(indices, matrix.T)
    

    【讨论】:

    • 但是choose 文档不鼓励这种使用,即使它可以工作 - 达到一定大小(32 种选择)。
    【解决方案2】:

    您可以将integer array indexing 用于行和列:

    res = mat[np.arange(len(mat)), arr]
    

    这是一个演示:

    mat = np.array([[0, 4, 3, 1],
                    [2, 8, 8, 2],
                    [1, 2, 3, 4],
                    [5, 4, 3, 2],
                    [4, 3, 2, 1],
                    [2, 5, 6, 4]])
    
    arr = np.array([0, 0, 3, 0, 0, 3])
    
    res = mat[np.arange(len(mat)), arr]
    
    print(res)
    
    array([0, 2, 4, 5, 4, 4])
    

    【讨论】:

      猜你喜欢
      • 2021-12-16
      • 2018-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多