如何创建每行元素按序列递增的上三角矩阵?
问题分析与解决
原代码无法得到期望结果的核心问题:
np.triu(np.ones((5,5)))生成的是上三角元素全为1、下三角全为0的矩阵,因此arr > 1的判断结果全为False,后续的赋值语句根本不会执行,最终输出的还是初始的上三角全1矩阵。
正确实现方式
方法1:利用索引广播(numpy向量化操作,效率更高)
import numpy as np n = 5 # 生成行、列索引矩阵 rows, cols = np.indices((n, n)) # 上三角区域赋值为 列索引-行索引+1,下三角保持0 result = np.where(rows <= cols, cols - rows + 1, 0) print(result)
方法2:循环填充(逻辑直观)
import numpy as np n = 5 result = np.zeros((n, n)) for i in range(n): # 第i行从第i列开始,填充1到n-i的序列 result[i, i:] = np.arange(1, n - i + 1) print(result)
两种方法都能输出期望的结果:
[[1 2 3 4 5] [0 1 2 3 4] [0 0 1 2 3] [0 0 0 1 2] [0 0 0 0 1]]
内容的提问来源于stack exchange,提问作者Dr Simhachalam
相关产品推荐
相关产品推荐

