【发布时间】:2020-03-03 11:48:54
【问题描述】:
我有一个矩阵(由列表组成),看起来像:
matrix = [[0, 0, 0, 0, 5],
[0, 0, 0, 4, 0],
[2, 0, 3, 0, 0],
[3, 2, 0, 2, 0],
[1, 0, 2, 0, 1]]
我正在努力创建一个函数,它将这个矩阵作为输入,以及矩阵中的一个位置 - 由一个元组表示 - 并返回与该点相交的两条对角线(不使用 NumPy )。例如,
def getDiagonal(matrix, pos)
(row, col) = pos
# Smart diagonal finder code #
return (diag1, diag2)
diagonals = getDiagonals(matrix, (1, 1))
print(diagnonal[0])
print(diagnonal[1])
print(' ')
diagonals = getDiagonals(matrix, (1, 3))
print(diagnonal[0])
print(diagnonal[1])
预期输出:
OUT: [5, 4, 3, 2, 1]
OUT: [2, 2, 2]
OUT:
OUT: [0, 2, 2]
OUT: [0, 0, 3, 2, 1]
值得指出的是,我不介意从哪个方向(从下到上或从上到下)返回对角线的元素。它们可以很容易地以一种方式完成,如果需要,可以使用 reverse() 来尊重它们。
我看过类似的问题,例如this one,但这主要涉及获取矩阵的前导对角线,并且提供的关于获取点的对角线的信息较少。
非常感谢您提前提供的帮助和 cmets!
【问题讨论】:
-
你是从左下角取行和列的位置吗?并期望返回的向量自下而上排序?这对于 Python 来说是非常规的,但如果这是一个要求,请在问题中说明这一点。此外,查看您是否尝试过任何代码可能会有所帮助。
-
@jdehesa 谢谢!我盯着那个矩阵看了大约 5 分钟,试图弄清楚他在哪里得到了他的预期输出......
-
抱歉,返回的对角线的方向对我来说并不重要。至于我目前的代码,没有什么比那里更多的了:'(
-
编辑了输出以获得更好的清晰度。谢谢指出!
-
使用
for-loop 从位置(a+(-2), b+(-2)) (a+(-1),b+(-1)), (a+0, b+0), (a+1, b+1)和第二个(a+(-2), b+2) (a+(-1),b+1), (a+0, b+0), (a+1, b+(-1))获得一个对角线。但是您将需要更大的范围 - 即(-width, width)或更精确地计算
标签: python list matrix python-3.6 diagonal