【发布时间】:2020-07-02 00:35:44
【问题描述】:
我目前有一个程序的矩阵输出,如下所示,其中左下角全为 1:
B C D E
A 0 1 2 3
B 1 1 3 3
C 1 1 1 3
D 1 1 1 0
有没有办法将其转换为对称矩阵而不是全部为 1?
【问题讨论】:
标签: r
我目前有一个程序的矩阵输出,如下所示,其中左下角全为 1:
B C D E
A 0 1 2 3
B 1 1 3 3
C 1 1 1 3
D 1 1 1 0
有没有办法将其转换为对称矩阵而不是全部为 1?
【问题讨论】:
标签: r
我不认为@RonakShah 的解决方案是正确的。
M = matrix(1:16, nrow=4)
M
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 2 6 10 14
[3,] 3 7 11 15
[4,] 4 8 12 16
M[lower.tri(M)] <- M[upper.tri(M)]
M
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 5 6 10 14
[3,] 9 13 11 15
[4,] 10 14 15 16
这不是对称的。相反,使用
M = matrix(1:16, nrow=4)
M[lower.tri(M)] <- t(M)[lower.tri(M)]
M
[,1] [,2] [,3] [,4]
[1,] 1 5 9 13
[2,] 5 6 10 14
[3,] 9 10 11 15
[4,] 13 14 15 16
【讨论】:
您可以将上三角的值复制到下三角。
mat[lower.tri(mat)] <- mat[upper.tri(mat)]
mat
# B C D E
#A 0 1 2 3
#B 1 1 3 3
#C 2 3 1 3
#D 3 3 3 0
【讨论】: