python - 如何从特定元素获取矩阵/网格的对角线元素?

标签 python list matrix grid diagonal

我有一个由不同数字组成的 8x8 网格,我想获取包含给定起始位置的对角线元素。这是一个例子

l = [[str(randint(1,9)) for i in range(8)] for n in range(8)]

>> [
[1 5 2 8 6 9 6 8]
[2 2 2 2 8 2 2 1]
[9 5 9 6 8 2 7 2]
[2 8 8 6 4 1 8 1]
[2 5 5 5 4 4 7 9]
[3 9 8 8 9 4 1 1]
[8 9 2 4 2 8 4 3]
[4 4 7 8 7 5 3 6]
]

我将如何从位置 x=4 和 y=3 获取对角线(即该列表中的第四个列表和第五个元素)?所以我想要的对角线是 [5,2,6,4,4,1,3]。

最佳答案

根据xy的差值,可以计算对角线左上角项的行数和列数,并根据两个边界的较低者与起始行和列的较高者之间的差异:

def diagonal(m, x, y):
    row = max((y - x, 0))
    col = max((x - y, 0))
    for i in range(min((len(m), len(m[0]))) - max((row, col))):
        yield m[row + i][col + i]

这样:

m = [
    [1, 5, 2, 8, 6, 9, 6, 8],
    [2, 2, 2, 2, 8, 2, 2, 1],
    [9, 5, 9, 6, 8, 2, 7, 2],
    [2, 8, 8, 6, 4, 1, 8, 1],
    [2, 5, 5, 5, 4, 4, 7, 9],
    [3, 9, 8, 8, 9, 4, 1, 1],
    [8, 9, 2, 4, 2, 8, 4, 3],
    [4, 4, 7, 8, 7, 5, 3, 6],
]
print(list(diagonal(m, 4, 3)))

输出:

[5, 2, 6, 4, 4, 1, 3]

关于python - 如何从特定元素获取矩阵/网格的对角线元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54892732/

相关文章:

python - 在python中的蒙版外的图像上添加模糊/渐变

c# - 如何在 C# 中将 List<T> 转换为 HashSet<T>?

r - 在不丢失 dimnames 的情况下从稀疏矩阵转换为密集矩阵?

c++ - Eigen 无法给出正确的矩阵逆 (c++)

matlab - 使用 25 个或更少的字符在 MATLAB 中创建特定矩阵

python - 具有不同方向的并排相同的 axis3d

Python。查找具有设定长度的所有可能的数字组合

python - 在一定数量的变量之后更改列表输出

javascript - 使用 jQuery/Javascript 隐藏按钮包含的元素

python - 代码 Python 3 的问题