代码之家  ›  专栏  ›  技术社区  ›  Max Ghenis shoyer

根据在另一个数组中指定的列从2D numpy数组中获取每行的值[重复]

  •  0
  • Max Ghenis shoyer  · 技术社区  · 8 年前

    给定一个二维numpy数组 A 一个一维核阵列 col 具有相同的行数和列范围值 一个 ,如何获取新的1D数组,该数组从 一个 ?

    例子:

    np.random.seed(0)
    A = np.random.randint(10, size=(5, 3))
    A
    # array([[5, 0, 3],
    #        [3, 7, 9],
    #        [3, 5, 2],
    #        [4, 7, 6],
    #        [8, 8, 1]])
    col = np.random.randint(A.shape[1], size=A.shape[0])
    col
    # array([2, 2, 0, 1, 1])
    

    基于 col列 ,我想从第0行和第1行获取元素2,从第2行获取元素0,从第3行和第4行获取元素1: [3, 9, 3, 7, 8] .

    正常的索引不起作用:

    A[col]
    # array([[3, 5, 2],
    #        [3, 5, 2],
    #        [5, 0, 3],
    #        [3, 7, 9],
    #        [3, 7, 9]])
    A[:, col]
    # array([[3, 3, 5, 0, 0],
    #        [9, 9, 3, 7, 7],
    #        [2, 2, 3, 5, 5],
    #        [6, 6, 4, 7, 7],
    #        [1, 1, 8, 8, 8]])
    
    1 回复  |  直到 8 年前
        1
  •  0
  •   Max Ghenis shoyer    8 年前

    这对大型阵列很有效,但速度非常慢:

    A[:, col].diagonal()
    # array([3, 9, 3, 7, 8])