楼主: yijiaobani
2569 5

[问答] 对称矩阵的复原(知道矩阵的坐标位点) [推广有奖]

  • 4关注
  • 5粉丝

博士生

26%

还不是VIP/贵宾

-

威望
0
论坛币
186 个
通用积分
10.4911
学术水平
2 点
热心指数
8 点
信用等级
0 点
经验
5127 点
帖子
147
精华
0
在线时间
236 小时
注册时间
2015-5-18
最后登录
2020-10-28

10论坛币
最近遇到了一个问题,在算遗传率和育种值中,直接得到亲缘关系的逆矩阵,格式是这样:A形状:

   Row Column   Ainverse
  1      1  1.8333333
  2      1  0.5000000
  2      2  2.0000000
  3      1 -0.6666667
  3      2  0.5000000
  3      3  1.8333333
  4      1 -1.0000000
  4      2 -1.0000000
  4      4  2.0000000
  5      2 -1.0000000
  5      3 -1.0000000
  5      5  2.0000000

其实逆矩阵规范的写法应该是这样:
B形状:
1.8333333  0.5 -0.6666667   -1    0
0.5000000  2.0  0.5000000   -1   -1
-0.6666667  0.5  1.8333333    0   -1
-1.0000000 -1.0  0.0000000    2    0
  0.0000000 -1.0 -1.0000000    0    2

然后对它求逆矩阵就可以得到亲缘关系的矩阵。
问题:
这里有对称矩阵的坐标图A形状(知道坐标的行和列号),值为0的坐标省略,通过什么方法可以复原成B状?

其实我不是求程序的,只是不知道解决思路,有大神给我指导一下思路即可,十分感谢。

最佳答案

十里春风 查看完整内容

mat=matrix(0,5,5) mat[cbind(Row,Column)]
关键词:对称矩阵 inverse column colum 求逆矩阵 对称矩阵 复原 编程
<img src="stati ...
沙发
十里春风 学生认证  发表于 2015-7-21 18:49:00 |只看作者 |坛友微信交流群
mat=matrix(0,5,5)
mat[cbind(Row,Column)]<-Ainverse
mat[upper.tri(mat)]=t(mat)[upper.tri(t(mat))]

使用道具

藤椅
yijiaobani 发表于 2015-7-21 18:49:30 |只看作者 |坛友微信交流群
我用的是R语言

使用道具

板凳
meishanjia1900 发表于 2015-7-21 21:30:38 |只看作者 |坛友微信交流群
  1. > a
  2.    Row Column   Ainverse
  3. 1    1      1  1.8333333
  4. 2    2      1  0.5000000
  5. 3    2      2  2.0000000
  6. 4    3      1 -0.6666667
  7. 5    3      2  0.5000000
  8. 6    3      3  1.8333333
  9. 7    4      1 -1.0000000
  10. 8    4      2 -1.0000000
  11. 9    4      4  2.0000000
  12. 10   5      2 -1.0000000
  13. 11   5      3 -1.0000000
  14. 12   5      5  2.0000000
  15. > b <- tapply(a[,3],list(a[,1],a[,2]),sum)
  16. > b
  17.            1    2         3  4  5
  18. 1  1.8333333   NA        NA NA NA
  19. 2  0.5000000  2.0        NA NA NA
  20. 3 -0.6666667  0.5  1.833333 NA NA
  21. 4 -1.0000000 -1.0        NA  2 NA
  22. 5         NA -1.0 -1.000000 NA  2
  23. > b0 <- replace(b,is.na(b),0)
  24. > b0
  25.            1    2         3 4 5
  26. 1  1.8333333  0.0  0.000000 0 0
  27. 2  0.5000000  2.0  0.000000 0 0
  28. 3 -0.6666667  0.5  1.833333 0 0
  29. 4 -1.0000000 -1.0  0.000000 2 0
  30. 5  0.0000000 -1.0 -1.000000 0 2
  31. > result <- b0 + t(b0) - diag(diag(b0))
  32. > result
  33.            1    2          3  4  5
  34. 1  1.8333333  0.5 -0.6666667 -1  0
  35. 2  0.5000000  2.0  0.5000000 -1 -1
  36. 3 -0.6666667  0.5  1.8333333  0 -1
  37. 4 -1.0000000 -1.0  0.0000000  2  0
  38. 5  0.0000000 -1.0 -1.0000000  0  2
复制代码


使用道具

十里春风 发表于 2015-7-21 18:49
mat=matrix(0,5,5)
mat[cbind(Row,Column)]
请问如果原矩阵名字是A, 复原矩阵时用的code应该是:
mat=matrix(0,5,5)
mat[cbind(A$Row,A$Column)] 吗?

为何我这样尝试之后的结果是一列全为0的数字?

使用道具

★○瞬间●☆ 发表于 2016-8-25 07:42
请问如果原矩阵名字是A, 复原矩阵时用的code应该是:
mat=matrix(0,5,5)
mat[cbind(A$Row,A$Column)] 吗 ...
不好意思, 有两个$没显示出来

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-19 03:58