Python 从每行numpy数组的特定列中提取数据

Python 从每行numpy数组的特定列中提取数据,python,numpy,Python,Numpy,我试图为A中的每一行I获取对应于列b[I]的值 我可以在不使用for循环的情况下执行此操作吗 A = np.array([[35, 2, 23, 22], [44, 21, 15, 4], [44, 21, 15, 4], [37, 4, 17, 41], [33, 4, 4, 18], [35, 2, 23, 22]]) b = np.array([0,1,1,2,3,0]) C = zeros(len(b),1) for i in range(6): C[i] = A[i][b[i]

我试图为A中的每一行I获取对应于列b[I]的值

我可以在不使用for循环的情况下执行此操作吗

A = np.array([[35, 2, 23, 22], [44, 21, 15, 4], [44, 21, 15, 4], [37, 4, 17, 41], [33, 4, 4, 18], [35, 2, 23, 22]])
b = np.array([0,1,1,2,3,0])
C = zeros(len(b),1)
for i in range(6):
    C[i] = A[i][b[i]]   

由于要顺序索引
A
的行,因此除了
b
之外,还可以使用
np.arange(len(A))
进行索引,以获得所需的输出:

A[np.arange(len(A)), b]

# array([35, 21, 21, 17, 18, 35])
显示如何工作:

# A np.arange(len(A)) b array([[35, 2, 23, 22], [0, 0] [44, 21, 15, 4], [1, 1] [44, 21, 15, 4], [2, 1] [37, 4, 17, 41], [3, 2] [33, 4, 4, 18], [4, 3] [35, 2, 23, 22]]) [5, 0] #A名词短语arange(len(A))b 数组([[35,2,23,22],[0,0] [44, 21, 15, 4], [1, 1] [44, 21, 15, 4], [2, 1] [37, 4, 17, 41], [3, 2] [33, 4, 4, 18], [4, 3] [35, 2, 23, 22]]) [5, 0] 这个怎么样

A[:,b].diagonal()
Out[133]: array([35, 21, 21, 17, 18, 35])