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
相关产品推荐
相关产品推荐

