Pythonic方法让对角线穿过一个点(x,y)

时间:2017-09-09 23:10:27

标签: python arrays numpy diagonal

在通过(x,y)的矩阵中获取元素列表的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)如何以Pythonic方式获取穿过9的对角线中的元素?基本上,[3,9,15][5,9,13,17,21]都是。

抱歉,我只是学习Python,因此问题。谢谢!

1 个答案:

答案 0 :(得分:5)

使用带有一点偏移逻辑的np.diagonal

weight

索引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开始收集。因此,您需要获取当前列索引并将其减去当前行索引,以确定0 th 行的正确列索引。类似地,对于小对角线,阵列被翻转(旋转90°)并重复该过程。