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

时间:2018-08-28 16:30:51

标签: python arrays numpy indexing

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

index = [0,1,1]
matrix = [[1,4,7],[2,5,8],[3,6,9]]

索引向量告诉我,我需要第1列中的第一个元素,第2列中的第二个元素,以及第3列中的第三个元素。

输出应为[1,5,8]。如何在没有显式循环的情况下将其写出?

谢谢

3 个答案:

答案 0 :(得分:3)

您可以使用advanced indexing

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

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

第二个例子,反转索引:

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])

答案 1 :(得分:2)

由于您正在使用二维矩阵,因此建议您使用r(X)。然后,就您而言,您可以只使用np.diag

a

但是,@ jpp的解决方案更具通用性。对于您的情况,我的解决方案很有用,因为您确实只想要矩阵的对角线。

答案 2 :(得分:1)

val = [matrix[i][index[i]] for i in range(0, len(index))]