通过条目 (i,j)
获取矩阵中对角线元素列表的 Pythonic 方法是什么? ?
例如,给定一个矩阵:
[1 2 3 4 5]
[6 7 8 9 10]
[11 12 13 14 15]
[16 17 18 19 20]
[21 22 23 24 25]
和一个条目,比如说,(1,3)
(代表元素 9
)如何获得穿过 9
的对角线中的元素以 Pythonic 的方式?基本上,[3,9,15]
和 [5,9,13,17,21]
两者。
最佳答案
使用 np.diagonal
带有一点偏移逻辑。
import numpy as np
lst = np.array([[1, 2, 3, 4, 5],
[6, 7, 8, 9, 10],
[11, 12, 13, 14, 15],
[16, 17, 18, 19, 20],
[21, 22, 23, 24, 25]])
i, j = 1, 3
major = np.diagonal(lst, offset=(j - i))
print(major)
array([ 3, 9, 15])
minor = np.diagonal(np.rot90(lst), offset=-lst.shape[1] + (j + i) + 1)
print(minor)
array([ 5, 9, 13, 17, 21])
索引i
和j
是行和列。通过指定偏移量,numpy
知道从哪里开始为对角线选择元素。
对于主对角线,您想从第一行的 3
开始收集。因此,您需要将当前列索引减去当前行索引,以找出第 0th 行的正确列索引。与次对角线类似,阵列被翻转(旋转 90°)并重复该过程。
关于使两条对角线都通过矩阵条目 (i,j) 的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135906/