Python 使用Numpy基于向量从三维矩阵中选择列

Python 使用Numpy基于向量从三维矩阵中选择列,python,numpy,matrix,Python,Numpy,Matrix,因此,我尝试使用Numpy根据向量中的值从3D矩阵中选择一些列。我已经使用列表理解解决了这个问题,但我认为可能有更好的方法使用Numpy的内置方法。有人知道是否存在这样的方法或方法组合吗 matrix1=np.数组[[1,2,3], [4, 5, 6], [7, 8, 9]] matrix2=np.数组[[10,11,12], [13, 14, 15], [16, 17, 18]] 总矩阵=np.数组[matrix1,matrix2] 向量=[0,1,1] 从第一个矩阵检索第一列,从第二个矩阵检

因此,我尝试使用Numpy根据向量中的值从3D矩阵中选择一些列。我已经使用列表理解解决了这个问题,但我认为可能有更好的方法使用Numpy的内置方法。有人知道是否存在这样的方法或方法组合吗

matrix1=np.数组[[1,2,3], [4, 5, 6], [7, 8, 9]] matrix2=np.数组[[10,11,12], [13, 14, 15], [16, 17, 18]] 总矩阵=np.数组[matrix1,matrix2] 向量=[0,1,1] 从第一个矩阵检索第一列,从第二个矩阵检索第二列和第三列。 结果=np.数组[index1的总矩阵[index2,:,index1],枚举向量中的index2]。转置 结果: np.数组[[1,11,12], [4, 14, 15], [7, 15, 18]] 向量索引第一个维度。另2个用它广播以选择所需的3,3。虽然我知道一般原则,但在得到正确的原则之前,我尝试了一些关于9的变化

在另一个答案中使用对角线相当于:

In [61]: total_matrix[vector][:,np.arange(3),np.arange(3)]
Out[61]: 
array([[ 1,  5,  9],
       [10, 14, 18],
       [10, 14, 18]])
您可以使用向量对总矩阵进行切片,然后选择适当的对角元素:

>>> np.diagonal(total_matrix[vector], axis1=0, axis2=2)
array([[ 1, 11, 12],
       [ 4, 14, 15],
       [ 7, 17, 18]])


我不是通过运行列表来获取结果数组的。我也不明白[0,1,1]如何被明确地解释为第一个矩阵中的第一列,第二个矩阵中的第二列和第三列。@JussiNurminen,你说得对,我现在修正了它。
>>> np.diagonal(total_matrix[vector], axis1=0, axis2=2)
array([[ 1, 11, 12],
       [ 4, 14, 15],
       [ 7, 17, 18]])