根据另一个数组中指定的列,从2D numpy数组中获取每行的值

时间:2018-06-12 23:37:27

标签: python numpy

给定一个2D numpy数组A和一个numpy数组col,其行数和值的数量与A中的列数相同,我怎样才能获得一个新的一维数组从A

中的每一行中选择相应的列

示例:

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 个答案:

答案 0 :(得分:0)

这适用于大型数组但速度很慢:

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