问题: 现有一个矩阵, 想将其以上三角矩阵变为对称矩阵
例子:
set.seed(123)
mat <- matrix(runif(16),4,4)
mat
mat矩阵内容
现将其上三角矩阵为基础,变为对称矩阵
> set.seed(123)
> mat <- matrix(runif(16),4,4)
> mat
[,1] [,2] [,3] [,4]
[1,] 0.2875775 0.9404673 0.5514350 0.6775706
[2,] 0.7883051 0.0455565 0.4566147 0.5726334
[3,] 0.4089769 0.5281055 0.9568333 0.1029247
[4,] 0.8830174 0.8924190 0.4533342 0.8998250
思路1
- 将下三角矩阵变为0
- 将矩阵转置
- 两者相加, 再减去对角线
r1 <- mat
r1[lower.tri(r1)] <- 0
r1
r2 <- r1 + t(r1) - diag(diag(r1))
r2
mat
结果
> r2
[,1] [,2] [,3] [,4]
[1,] 0.2875775 0.9404673 0.5514350 0.6775706
[2,] 0.9404673 0.0455565 0.4566147 0.5726334
[3,] 0.5514350 0.4566147 0.9568333 0.1029247
[4,] 0.6775706 0.5726334 0.1029247 0.8998250
思路2
- 将原矩阵转置
- 提取转置后的下三角
- 将矩阵的下三角 赋值为 原矩阵转置后的下三角
rr1 <- mat
rr1[lower.tri(rr1)] <- t(rr1)[lower.tri(rr1)]
rr1
mat
结果
> rr1
[,1] [,2] [,3] [,4]
[1,] 0.2875775 0.9404673 0.5514350 0.6775706
[2,] 0.9404673 0.0455565 0.4566147 0.5726334
[3,] 0.5514350 0.4566147 0.9568333 0.1029247
[4,] 0.6775706 0.5726334 0.1029247 0.8998250
第二种方法更简单.
如果您对于数据分析,对于软件操作,对于数据整理,对于结果理解,有任何问题,欢迎联系我。