如何获取方阵的所有列表单独对角线?

问题描述 投票:0回答:0

假设我有方阵:

matrix = [[1, 2, 3, 4],
          [5, 6, 7, 8],
          [9, 10, 11, 12],
          [13, 14, 15, 16]]
Call list negative diagonal is [9, 14], [1, 6, 11, 16], [3, 8]
Call list positive diagonal is [2, 5], [4, 7, 10, 13], [12, 15]

我的想法:

def get_negative_diagonals(matrix):
    diagonals = []
    for i in range(matrix.shape[0]):
        diagonal = np.diag(matrix, i)
        if len(diagonal) > 1:
            diagonals.append(diagonal.tolist())
    for i in range(1, matrix.shape[1]):
        diagonal = np.diag(matrix, -i)
        if len(diagonal) > 1:
            diagonals.append(diagonal.tolist())
    return diagonals

def get_positive_diagonals(matrix):
    flipped_matrix = np.fliplr(matrix)
    diagonals = get_negative_diagonals(flipped_matrix)
    for diagonal in diagonals:
        diagonal.reverse()
    return diagonals

但这不是我要的结果,上面两个函数的输出:

negative diagonals: [[1, 6, 11, 16], [2, 7, 12], [3, 8], [5, 10, 15], [9, 14]]
positive diagonals: [[13, 10, 7, 4], [9, 6, 3], [5, 2], [14, 11, 8], [15, 12]]

我尝试使用 numpy 来获取上面的列表,但结果并不完全符合我的预期。有没有办法像我一开始描述的那样返回输出?也许使用 numpy 或其他任何东西。

python numpy matrix diagonal
© www.soinside.com 2019 - 2024. All rights reserved.