R语言中矩阵变为对称矩阵的两种方法

本文介绍如何将一个上三角矩阵转换成对称矩阵,并提供了两种实现方法:第一种方法涉及将矩阵的下三角部分设为0,然后通过转置和对角线元素调整来构造对称矩阵;第二种方法则直接利用矩阵与其转置之间的对应关系进行赋值。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题: 现有一个矩阵, 想将其以上三角矩阵变为对称矩阵

例子:

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

第二种方法更简单.



如果您对于数据分析,对于软件操作,对于数据整理,对于结果理解,有任何问题,欢迎联系我。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值