使两条对角线都通过矩阵条目 (i,j) 的 Pythonic 方法

标签 python arrays numpy matrix diagonal

通过条目 (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])

索引ij 是行和列。通过指定偏移量,numpy 知道从哪里开始为对角线选择元素。

对于主对角线,您想从第一行的 3 开始收集。因此,您需要将当前列索引减去当前行索引,以找出第 0th 行的正确列索引。与次对角线类似,阵列被翻转(旋转 90°)并重复该过程。

关于使两条对角线都通过矩阵条目 (i,j) 的 Pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46135906/

相关文章:

javascript - 获取对象中具有特定名称的javascript字段

python - numpy 数组连接 : "ValueError: all the input arrays must have same number of dimensions"

java - 在java中的特定位置将一个数组的元素添加到另一个数组

python - pygame pygame.error : Error reading from ICO

python - 函数式编程 : How to convert an implementation of fibonacci written in python to haskell

python - DataSet 归一化输入值的范围

c++ - 动态为 C 字符串分配内存,无需先询问用户输入有多长

python - 索引numpy数组时numba @njit错误

python - 如何在单元格具有指定值的 2d 蒙版中找到 top_left、top_right、bottom_left、right 坐标?

python - del MyClass 不调用 object.__del__()