3×3矩阵分区域数值累加实现求助:基于Numpy的代码调试
问题解决代码及说明
首先修正核心错误:原代码用axis=0是求列的最大值,要获取每行最大值需改为axis=1。之后通过Numpy索引掩码或循环定位三个区域,完成数值累加操作。
高效实现代码(Numpy掩码方式)
import numpy as np mat = np.array([[10,5,9], [2,20,6], [8,3,30]]).reshape(3,3) # 获取每行的最大值 max_list = np.max(mat, axis=1) N1, N2, N3 = max_list # 创建行列索引矩阵,用于定位区域 rows, cols = np.indices(mat.shape) # 1. 上半区(行索引 < 列索引)加N1 mat[rows < cols] += N1 # 2. 主对角线(行索引 == 列索引)加N2 mat[rows == cols] += N2 # 3. 下半区(行索引 > 列索引)加N3 mat[rows > cols] += N3 print(mat)
运行输出
[[30 15 19] [32 40 26] [38 33 60]]
关键修正点
- 替换
axis=0为axis=1,正确获取每行最大值 - 用Numpy索引掩码替代循环,矩阵操作更高效简洁
- 明确三个区域的定义:
- 上半区:主对角线以上(不含对角线)的元素
- 主对角线:行、列索引相等的元素
- 下半区:主对角线以下(不含对角线)的元素
内容的提问来源于stack exchange,提问作者Harshika Malhotra
相关产品推荐
相关产品推荐

