Python-在numpy中索引另一个数组

发布于 2021-02-02 23:19:02

假设我有一个带有任意值的矩阵A:

array([[ 2, 4, 5, 3],
       [ 1, 6, 8, 9],
       [ 8, 7, 0, 2]])

矩阵B包含A中元素的索引:

array([[0, 0, 1, 2],
       [0, 3, 2, 1],
       [3, 2, 1, 0]])

我该如何选择值一个指向由乙,即:

A[B] = [[2, 2, 4, 5],
        [1, 9, 8, 6],
        [2, 0, 7, 8]]
关注者
0
被浏览
72
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    你可以使用NumPy's advanced indexing

    A[np.arange(A.shape[0])[:,None],B]
    

    一个人也可以使用linear indexing

    m,n = A.shape
    out = np.take(A,B + n*np.arange(m)[:,None])
    

    样品运行

    In [40]: A
    Out[40]: 
    array([[2, 4, 5, 3],
           [1, 6, 8, 9],
           [8, 7, 0, 2]])
    
    In [41]: B
    Out[41]: 
    array([[0, 0, 1, 2],
           [0, 3, 2, 1],
           [3, 2, 1, 0]])
    
    In [42]: A[np.arange(A.shape[0])[:,None],B]
    Out[42]: 
    array([[2, 2, 4, 5],
           [1, 9, 8, 6],
           [2, 0, 7, 8]])
    
    In [43]: m,n = A.shape
    
    In [44]: np.take(A,B + n*np.arange(m)[:,None])
    Out[44]: 
    array([[2, 2, 4, 5],
           [1, 9, 8, 6],
           [2, 0, 7, 8]])
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看