You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何提取矩阵中从右上到左下的所有对角线元素并存储为数组

提取矩阵右上到左下方向对角线元素的解决方案

代码问题说明

你现有代码的逻辑方向是正确的,不符合预期的核心原因有两点:

  1. numpy的diagonal()方法返回的是numpy数组,而非你需要的Python原生列表,缺少格式转换步骤
  2. 写死的range(-3, 4)仅适配4x4矩阵,调整为动态计算的偏移范围可适配任意尺寸的二维矩阵

修复后的numpy实现

import numpy as np

def get_diags_lower_left(matrix):
    m, n = matrix.shape
    # 动态计算偏移范围,支持任意行数、列数的矩阵
    return [np.fliplr(matrix).diagonal(i).tolist() for i in range(-(m-1), n)][::-1]

纯Python实现(无第三方依赖)

如果不需要依赖numpy,可以基于反对角线的核心特性实现:所有右上到左下对角线上的元素,行索引+列索引的和为固定值

def get_diags_lower_left(matrix):
    row_num = len(matrix)
    col_num = len(matrix[0])
    result = []
    # 对角线总数量 = 行数 + 列数 -1
    for sum_idx in range(row_num + col_num - 1):
        current_diag = []
        # 遍历当前对角线上的所有有效元素
        for i in range(max(0, sum_idx - col_num + 1), min(row_num, sum_idx + 1)):
            j = sum_idx - i
            current_diag.append(matrix[i][j])
        result.append(current_diag)
    return result

效果验证

传入你给出的示例矩阵,两种实现都会输出符合要求的结果:

[
 [2],
 [0, 3],
 [0, 0, 2],
 [2, 0, 0, 0],
 [3, 0, 0],
 [3, 0],
 [0]
]

内容的提问来源于stack exchange,提问作者Y4RD13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 10:54:03