Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python,如何从矩阵的每列中选择元素_Python_Arrays_Numpy_Indexing - Fatal编程技术网

python,如何从矩阵的每列中选择元素

python,如何从矩阵的每列中选择元素,python,arrays,numpy,indexing,Python,Arrays,Numpy,Indexing,我需要根据索引向量从矩阵的每一列中提取一个元素。说: index = [0,1,1] matrix = [[1,4,7],[2,5,8],[3,6,9]] 索引向量告诉我需要第1列的第一个元素、第2列的第二个元素和第3列的第三个元素 输出应为[1,5,8]。如果没有显式循环,我如何写出它 谢谢既然您正在处理二维矩阵,我建议您使用numpy。然后,在您的情况下,您可以使用: 然而,@jpp的解决方案更具普遍性。我的解决方案对您的情况很有用,因为您只需要矩阵的对角线。由于您使用的是二维矩阵,我建议

我需要根据索引向量从矩阵的每一列中提取一个元素。说:

index = [0,1,1]
matrix = [[1,4,7],[2,5,8],[3,6,9]]
索引向量告诉我需要第1列的第一个元素、第2列的第二个元素和第3列的第三个元素

输出应为
[1,5,8]
。如果没有显式循环,我如何写出它


谢谢

既然您正在处理二维矩阵,我建议您使用
numpy
。然后,在您的情况下,您可以使用:


然而,@jpp的解决方案更具普遍性。我的解决方案对您的情况很有用,因为您只需要矩阵的对角线。

由于您使用的是二维矩阵,我建议使用
numpy
。然后,在您的情况下,您可以使用:

val = [matrix[i][index[i]] for i in range(0, len(index))]
然而,@jpp的解决方案更具普遍性。我的解决方案对您的情况很有用,因为您只需要矩阵的对角线。

您可以使用:

val = [matrix[i][index[i]] for i in range(0, len(index))]
对于第二个示例,请反转索引:

index = np.array([0,1,1])
matrix = np.array([[1,4,7],[2,5,8],[3,6,9]])

res = matrix[index, np.arange(matrix.shape[1])]
# array([1, 5, 8])
您可以使用:

对于第二个示例,请反转索引:

index = np.array([0,1,1])
matrix = np.array([[1,4,7],[2,5,8],[3,6,9]])

res = matrix[index, np.arange(matrix.shape[1])]
# array([1, 5, 8])


你的例子似乎很不一般。像[0,2]这样的索引向量呢?[0,0,1,2]呢?这些是否也应包括在内?无需考虑。索引向量的Dim等于矩阵的列数xi更改索引向量,第一个索引向量来自第1列,第二个索引向量来自第2列和第3列您的示例看起来非常不一般。像[0,2]这样的索引向量呢?[0,0,1,2]呢?这些是否也应包括在内?无需考虑。索引向量的Dim等于矩阵的列数xi改变索引向量,第一个来自第1列,第二个来自第2列和第3列我想OP说没有显式循环怎么写我想OP说没有显式循环怎么写我应该把问题弄清楚。这只是一个例子。我需要更一般的东西,比如分别从三列中获取I,j,k元素,然后你们应该使用@jpp的解决方案。我应该把问题弄清楚。这只是一个例子。我需要更一般的东西,比如分别从三列中获取I,j,k元素,然后您应该使用@jpp的解决方案。非常感谢。它起作用了。但我需要选择w.r.t列。这一条适用于行。@Michaelson,你能更清楚一点吗?根据您的问题中所需的输出,输出为
[1,5,9]
。V0.15添加了一个
np。沿\u轴取\u执行此类索引的功能。这本书读起来很有趣。@hpaulj,谢谢,我确实需要升级!谢谢。它起作用了。但我需要选择w.r.t列。这一条适用于行。@Michaelson,你能更清楚一点吗?根据您的问题中所需的输出,输出为
[1,5,9]
。V0.15添加了一个
np。沿\u轴取\u执行此类索引的功能。这本书读起来很有趣。@hpaulj,谢谢,我确实需要升级!