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

上三角矩阵顺序索引推导对应行号与列号的实现方法

上三角矩阵索引转行列号的计算方案

以下方案默认场景为n阶方阵的上三角区域(包含主对角线,满足列号 ≥ 行号),按行优先顺序遍历,索引从0开始计数,如果你的遍历规则、索引起点、行列号规则不同,可以基于以下逻辑调整。

核心公式推导

  • 对于n阶方阵,第r行(行号从0开始)的上三角元素共有 n - r 个
  • 前r行的总元素数计算公式:total_before_r = r * n - r * (r - 1) / 2
  • 行号推导:通过解二次方程取整得到,公式为:
    row = floor( (2 * n + 1 - sqrt( (2 * n + 1) * (2 * n + 1) - 8 * index )) / 2 )
  • 列号推导:用索引减去前r行总元素数,再加上行号即可得到当前列号:
    column = index - (row * n - row * (row - 1) / 2) + row

代码实现示例

对应你给出的代码框架,以n=4(对应你循环中index<9的场景,4阶上三角含对角线前3行共9个元素)为例,实现如下:

#include <cmath>
// n为矩阵阶数,这里示例取4
int n = 4;
for (int index = 0; index < 9; index++) {
    int row = (int)floor( (2 * n + 1 - sqrt( pow(2 * n + 1, 2) - 8 * index )) / 2 );
    int total_before = row * n - row * (row - 1) / 2;
    int column = index - total_before + row;
    // 此处可直接使用计算得到的row、column
}

常见规则调整

  • 如果行列号需要从1开始计数,直接将计算得到的row、column各加1即可
  • 如果是严格上三角(不包含主对角线,列号>行号),调整列号公式为 column = index - total_before + row + 1 即可
  • 如果遍历顺序为列优先,只需要将公式中的行、列逻辑互换即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 17:24:03