如何使用 R 制作对称矩阵?
How do I make a symmetric matrix using R?
我正在尝试使用 R 制作对称矩阵。
我已经有一个矩阵。我的矩阵很大所以下面是一个简单的例子。
EX.
1 2 3
4 5 6
7 8 9
我需要把它们做成这样。
1 2+4 3+7
4+2 5 6+8
7+3 8+6 9
//所以我试过了。 // mat 是我正在使用的矩阵。
lowervector <- square_07[lower.tri(square_07, diag = FALSE)]
uppervector <- square_07[upper.tri(square_07, diag = FALSE)]
lowermat <- square_07
uppermat <- square_07
lowermat[lower.tri(lowermat, diag = FALSE)] <- t(square_07)[lower.tri(square_07, diag = FALSE)]
uppermat[upper.tri(uppermat, diag = FALSE)] <- t(square_07)[upper.tri(square_07, diag = FALSE)]
当我执行最后两行时,出现错误;
下标'upper.tri(uppermat, diag = FALSE)'是一个矩阵,数据't[upper.tri(square_07, diag = FALSE)]'的大小必须为1。
你应该知道。上矩阵只是一个例子。我的实际矩阵要大得多。是一个248*248的矩阵。
我该如何解决这个问题?
你可以试试这个-
mat[upper.tri(mat)] <- mat[upper.tri(mat)] + mat[lower.tri(mat)]
mat[lower.tri(mat)] <- mat[upper.tri(mat)]
mat
# [,1] [,2] [,3]
#[1,] 1 6 10
#[2,] 6 5 14
#[3,] 10 14 9
数据
mat <- structure(c(1L, 4L, 7L, 2L, 5L, 8L, 3L, 6L, 9L), .Dim = c(3L, 3L))
mat
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 4 5 6
#[3,] 7 8 9
这个更简单:
result <- square_07 + t(square_07)
diag(result) <- diag(square_07)
result
# [,1] [,2] [,3]
# [1,] 1 6 10
# [2,] 6 5 14
# [3,] 10 14 9
我正在尝试使用 R 制作对称矩阵。 我已经有一个矩阵。我的矩阵很大所以下面是一个简单的例子。
EX.
1 2 3
4 5 6
7 8 9
我需要把它们做成这样。
1 2+4 3+7
4+2 5 6+8
7+3 8+6 9
//所以我试过了。 // mat 是我正在使用的矩阵。
lowervector <- square_07[lower.tri(square_07, diag = FALSE)]
uppervector <- square_07[upper.tri(square_07, diag = FALSE)]
lowermat <- square_07
uppermat <- square_07
lowermat[lower.tri(lowermat, diag = FALSE)] <- t(square_07)[lower.tri(square_07, diag = FALSE)]
uppermat[upper.tri(uppermat, diag = FALSE)] <- t(square_07)[upper.tri(square_07, diag = FALSE)]
当我执行最后两行时,出现错误;
下标'upper.tri(uppermat, diag = FALSE)'是一个矩阵,数据't[upper.tri(square_07, diag = FALSE)]'的大小必须为1。
你应该知道。上矩阵只是一个例子。我的实际矩阵要大得多。是一个248*248的矩阵。
我该如何解决这个问题?
你可以试试这个-
mat[upper.tri(mat)] <- mat[upper.tri(mat)] + mat[lower.tri(mat)]
mat[lower.tri(mat)] <- mat[upper.tri(mat)]
mat
# [,1] [,2] [,3]
#[1,] 1 6 10
#[2,] 6 5 14
#[3,] 10 14 9
数据
mat <- structure(c(1L, 4L, 7L, 2L, 5L, 8L, 3L, 6L, 9L), .Dim = c(3L, 3L))
mat
# [,1] [,2] [,3]
#[1,] 1 2 3
#[2,] 4 5 6
#[3,] 7 8 9
这个更简单:
result <- square_07 + t(square_07)
diag(result) <- diag(square_07)
result
# [,1] [,2] [,3]
# [1,] 1 6 10
# [2,] 6 5 14
# [3,] 10 14 9