【问题标题】:efficient per column matrix indexing in numpynumpy中每列矩阵索引的高效
【发布时间】:2020-07-28 06:13:09
【问题描述】:

我有两个大小相同的矩阵 A、B。我想使用 B 的列来逐列访问 A 的列。例如,

A = np.array([[1, 4, 7],
              [2, 5, 8],
              [3, 6, 9]])

B = np.array([[0, 0, 2],
              [1, 2, 1],
              [2, 1, 0]])

我想要类似的东西:

A[B] = [[1, 4, 9],  
        [2, 6, 8], 
        [3, 5, 7]]

也就是说,我使用 B 的第 j 列作为 A 的第 j 列的索引。 有什么有效的方法吗? 谢谢!

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    你可以使用advanced indexing:

    A[B, np.arange(A.shape[0])]
    
    array([[1, 4, 9],
           [2, 6, 8],
           [3, 5, 7]])
    

    或者np.take_along_axis:

    np.take_along_axis(A, B, axis=0)
    
    array([[1, 4, 9],
           [2, 6, 8],
           [3, 5, 7]])
    

    【讨论】:

    • 效果很棒。只是为了确保我理解第一个建议中发生了什么:您在轴 0 处使用索引 Bij 索引 A,而在轴 1 处,向量 np.arange(A.shape[0]) 被广播为与 B 相同的形状?
    • 正是@MRm 在内部,两个索引数组一起广播到生成的形状。 arange 只是指定B 行中的每个值对应的列。查找详细解释以及示例here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-21
    相关资源
    最近更新 更多