Python3:获取矩阵(列表列表)的对角元素,该元素位于矩阵中的某个点上,而不使用NumPy

2024-06-01 01:52:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个矩阵(由列表组成),它看起来像:

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,但这主要涉及求矩阵的主对角线,提供的关于获取点的对角线的信息较少

非常感谢您的帮助和意见提前


Tags: 函数posnumpy列表def矩阵outmatrix
1条回答
网友
1楼 · 发布于 2024-06-01 01:52:45

有点让人困惑,但我认为这就是原因:

def getDiagonals(matrix, pos):
    row, col = pos
    nrows = len(matrix)
    ncols = len(matrix[0]) if nrows > 0 else 0
    # First diagonal
    d1_i, d1_j = nrows - 1 - max(row - col, 0), max(col - row, 0)
    d1_len = min(d1_i + 1, ncols - d1_j)
    diag1 = [matrix[d1_i - k][d1_j + k] for k in range(d1_len)]
    # Second diagonal
    t = min(row, ncols - col - 1)
    d2_i, d2_j = nrows - 1 - row + t, col + t
    d2_len = min(d2_i, d2_j) + 1
    diag2 = [matrix[d2_i - k][d2_j - k] for k in range(d2_len)]
    return (diag1, diag2)

# Test
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]]
diagonals = getDiagonals(matrix, (1, 1))
print(diagonals[0])
# [1, 2, 3, 4, 5]
print(diagonals[1])
# [2, 2, 2]

diagonals = getDiagonals(matrix, (1, 3))
print(diagonals[0])
# [2, 2, 0]
print(diagonals[1])
# [1, 2, 3, 0, 0]

diagonals = getDiagonals(matrix, (2, 2))
print(diagonals[0])
# [1, 2, 3, 4, 5]
print(diagonals[1])
# [1, 2, 3, 0, 0]

相关问题 更多 >