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

R语言中非对称矩阵的上三角与下三角求和实现需求

解决非对称矩阵上下三角对应位置求和问题

方案1:输出行名-列名-新值的数据表

R 实现

# 构造示例矩阵(替换成你的实际矩阵)
mat <- matrix(c(0,36,20,
                36,0,15,
                20,15,0), nrow=3, byrow=TRUE,
              dimnames=list(c("M10","M10.09","M20"), c("M10","M10.09","M20")))

# 生成所有行-列组合,筛选出 row < col 的非重复对(避免对角线和重复计算)
row_col_pairs <- expand.grid(row = rownames(mat), col = colnames(mat), stringsAsFactors = FALSE)
row_col_pairs <- row_col_pairs[row_col_pairs$row < row_col_pairs$col, ]

# 计算对应位置的求和值
row_col_pairs$sum_value <- mapply(function(r, c) mat[r,c] + mat[c,r], 
                                  row_col_pairs$row, row_col_pairs$col)

# 查看结果
print(row_col_pairs)

Python(Pandas)实现

import pandas as pd
import numpy as np

# 构造示例矩阵(替换成你的实际矩阵)
data = [[0,36,20],
        [36,0,15],
        [20,15,0]]
mat = pd.DataFrame(data, index=["M10","M10.09","M20"], columns=["M10","M10.09","M20"])

# 获取上三角(排除对角线)的行、列索引
rows, cols = np.triu_indices_from(mat, k=1)

# 构建结果数据表
result = pd.DataFrame({
    "row_name": mat.index[rows],
    "col_name": mat.columns[cols],
    "sum_value": mat.values[rows, cols] + mat.values[cols, rows]
})

# 查看结果
print(result)

方案2:输出三角矩阵(非方阵)

R 实现

# 构造示例矩阵(替换成你的实际矩阵)
mat <- matrix(c(0,36,20,
                36,0,15,
                20,15,0), nrow=3, byrow=TRUE,
              dimnames=list(c("M10","M10.09","M20"), c("M10","M10.09","M20")))

# 提取上下三角对应位置的和
tri_values <- mat[upper.tri(mat)] + mat[lower.tri(mat)]

# 转换为非方阵的三角矩阵,保留原行列名的对应关系
tri_mat <- matrix(tri_values, nrow = nrow(mat)-1, ncol = ncol(mat)-1,
                  dimnames = list(rownames(mat)[-nrow(mat)], colnames(mat)[-1]))

# 查看结果
print(tri_mat)

Python(Pandas)实现

import pandas as pd
import numpy as np

# 构造示例矩阵(替换成你的实际矩阵)
data = [[0,36,20],
        [36,0,15],
        [20,15,0]]
mat = pd.DataFrame(data, index=["M10","M10.09","M20"], columns=["M10","M10.09","M20"])

# 计算上下三角对应位置的和
tri_values = mat.values[np.triu_indices_from(mat, k=1)] + mat.values[np.tril_indices_from(mat, k=-1)]

# 构建非方阵的三角矩阵
tri_mat = pd.DataFrame(
    tri_values.reshape(mat.shape[0]-1, mat.shape[1]-1),
    index=mat.index[:-1],
    columns=mat.columns[1:]
)

# 查看结果
print(tri_mat)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 10:50:24