Python如何提取矩阵中从右上到左下的所有对角线元素并存储为数组
提取矩阵右上到左下方向对角线元素的解决方案
代码问题说明
你现有代码的逻辑方向是正确的,不符合预期的核心原因有两点:
- numpy的
diagonal()方法返回的是numpy数组,而非你需要的Python原生列表,缺少格式转换步骤 - 写死的
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
相关产品推荐
相关产品推荐

