全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
5909 7
2020-05-24
各位好!
我手上有一个N*N的对称矩阵,请问如何在R中实现保持矩阵行、列名称不变,个体自身之间的值始终为0(对角线始终为0),打乱不同个体间的数值呢?如下图所示。我只会按行或列打乱数据,但那样的话,矩阵结构就变了(不再是对称矩阵),也不能保持对角线始终为0了。


烦请各位高手赐教,感激不尽!

174654qb949b2tyexwrqbo.png

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2020-5-25 00:56:09
既然是对称矩阵,你只需要打乱上三角或下三角的数据,另外一半直接按对称赋值就行了
给你一个参考
复制代码


x和x1分别是
复制代码
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-25 02:23:43
megapanda 发表于 2020-5-25 00:56
既然是对称矩阵,你只需要打乱上三角或下三角的数据,另外一半直接按对称赋值就行了
给你一个参考
你好,非常感谢你的回复。我尝试了你发的代码,在做到x_ran = x[lower.tri(x)]这一步时,发现x_ran中的数值与最初的x矩阵中的数值不一样,然后回头再看原始矩阵,数据也变了呢请问您知道是咋回事吗?是不是x<-x+t(x)这一步出了问题?
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-25 09:58:42
dark293 发表于 2020-5-25 02:23
你好,非常感谢你的回复。我尝试了你发的代码,在做到x_ran = x[lower.tri(x)]这一步时,发现x_ran中的数 ...
代码前几行(一直到x <- x + t(x) )只是随便弄一个对称矩阵的。如果你自己已经有一个对称矩阵了,前面几行自然就不需要了
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-25 11:32:58
megapanda 发表于 2020-5-25 09:58
代码前几行(一直到x
你好,我确实是用的自己的矩阵数据哈。
  x<-as.matrix(network)  #network是我的数据
  x_ran = x[lower.tri(x)]
  x_ran <- sample(x_ran)  #到这一步都没有问题,x_ran确实是打乱后的下三角数据
  x1[lower.tri(x)] <- x_ran; x1 <- x1 + t(x1)  #运行完这一步后,数据就跟原数据不一样了,不知道为什么
刚又试了下,不是数据不一样了,而是报错 Error in x1 + t(x1) : non-conformable arrays
麻烦您抽空给看看好吗,谢谢你!
network.xls
大小:(27.5 KB)

 马上下载




二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2020-5-25 13:17:46
dark293 发表于 2020-5-25 11:32
你好,我确实是用的自己的矩阵数据哈。
  x
复制代码
试下吧,其中read_xls函数在包readxl里
例子本身只是提供思路,不是说直接照搬啊你的数据是12x12的,我给的例子是5x5的矩阵
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群