【问题标题】:How do I make a symmetric matrix using R?如何使用 R 制作对称矩阵?
【发布时间】:2021-07-29 04:17:25
【问题描述】:

我正在尝试使用 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 的矩阵。

我该如何解决这个问题?

【问题讨论】:

  • 我需要将矩阵中心线两侧的值相加...!中心线的值是 1、5、9。所以 2 和 4 应该加在一起。并且 3 和 7、6 和 8 也应该加在一起。

标签: r matrix symmetric


【解决方案1】:

这个比较简单:

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

【讨论】:

    【解决方案2】:

    你可以试试这个-

    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
    

    【讨论】:

    • 如果可行的话,我认为这是一个更简单的解决方案...谢谢!但问题是这段代码也出现了错误信息。 下标upper.tri(square_07)是一个矩阵,数据square_07[upper.tri(square_07)] + square_07[lower.tri(square_07)]的大小必须为1。
    • square_07 是我的矩阵
    • 什么是class(square_07),什么是dim(square_07)
    • 类是数据框。 class(square_07) "tbl_df" "tbl" "data.frame" 尺寸为 248*248
    • square_07[upper.tri(square_07)] 的类是数字
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2021-12-01
    • 2022-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多