Python 从每行numpy数组的特定列中提取数据
我试图为A中的每一行I获取对应于列b[I]的值 我可以在不使用for循环的情况下执行此操作吗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 = 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])