Python中按指定顺序遍历方阵上三角矩阵的实现方法求助
实现方案
你要实现的逐列遍历上三角矩阵、每列遍历时新增一行的逻辑,仅需将内层循环的范围设置为range(j+1)即可,该范围会让行索引从0开始,到当前列索引j结束,刚好匹配每列比上一列多一行的要求。
完整可运行代码
import numpy as np X = 10 Y = X U = np.zeros((Y, X)) # 用count变量标记遍历顺序,方便验证 traverse_order = 1 for j in range(X): # 内层循环行号从0到当前列号j for z in range(j + 1): U[z][j] = traverse_order traverse_order += 1 # 输出前5行5列验证遍历顺序 print(U[:5, :5])
运行后输出的前5行5列结果如下,可以清晰看到遍历顺序符合要求:
[[ 1. 2. 4. 7. 11.] [ 0. 3. 5. 8. 12.] [ 0. 0. 6. 9. 13.] [ 0. 0. 0. 10. 14.] [ 0. 0. 0. 0. 15.]]
更高效的无循环实现
如果矩阵尺寸较大,推荐直接用numpy内置的triu_indices方法直接获取上三角矩阵的索引,无需手动写循环:
import numpy as np X = 10 Y = X U = np.zeros((Y, X)) # 直接获取上三角(含对角线)的行、列索引,顺序和逐列遍历完全一致 row_idx, col_idx = np.triu_indices(Y, k=0) U[row_idx, col_idx] = np.arange(1, len(row_idx) + 1)
内容的提问来源于stack exchange,提问作者Phil
相关产品推荐
相关产品推荐

