簡體   English   中英

python,如何從矩陣的每一列中選擇元素

[英]python, how to select element from each column of matrix

我需要根據索引向量從矩陣的每一列中提取一個元素。 說:

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

索引向量告訴我,我需要第1列的第一個元素,第二列的第2個元素,第3列的第三個元素。

輸出應為[1,5,8] 如何在沒有顯式循環的情況下將其寫出?

謝謝

您可以使用高級索引

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

由於您使用的是二維矩陣,因此建議您使用numpy 然后,根據您的情況,您可以使用np.diag

>>> import numpy as np
>>> matrix = np.array([[1,4,7],[2,5,8],[3,6,9]])
>>> matrix
array([[1, 4, 7],
       [2, 5, 8],
       [3, 6, 9]])
>>> np.diag(matrix)
array([1, 5, 9])

但是,@ jpp的解決方案更具通用性。 我的解決方案在您的情況下很有用,因為您確實只想要矩陣的對角線。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM