【问题标题】:Replacing values of a diagonal matrix with specific values in R用 R 中的特定值替换对角矩阵的值
【发布时间】:2017-11-16 19:58:32
【问题描述】:

我是编程和编码的新手,目前正在学校学习 R 作为我的统计认证的一部分。

我们被要求创建一个名为“mat”的 10 x 10 矩阵,其中包含对角线上的数字 1 和非对角线上的数字 0。

我使用以下方法完成了此操作:

mat<-diag(10)
mat
   [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
   [1,]    1    0    0    0    0    0    0    0    0     0
   [2,]    0    1    0    0    0    0    0    0    0     0
   [3,]    0    0    1    0    0    0    0    0    0     0
   [4,]    0    0    0    1    0    0    0    0    0     0
   [5,]    0    0    0    0    1    0    0    0    0     0
   [6,]    0    0    0    0    0    1    0    0    0     0
   [7,]    0    0    0    0    0    0    1    0    0     0
   [8,]    0    0    0    0    0    0    0    1    0     0
   [9,]    0    0    0    0    0    0    0    0    1     0
  [10,]    0    0    0    0    0    0    0    0    0     1

然后我被要求在 k=3 的矩阵中划分出一个 k x k 块,并且也有这个单位结构,并描述有多少种方法可以做到这一点。

我只是想出了如何做到这一点:

 mat2<-mat[c(1,2,3),c(1,2,3)]
 mat2
          [,1] [,2] [,3]
    [1,]    1    0    0
    [2,]    0    1    0
    [3,]    0    0    1

到目前为止,我猜这么好?但是,现在我真的被卡住了,我不知道如何进行以下操作,使用 mat2 我现在被要求用这样的矩阵替换 mat (mat2) 的块对角线部分:

          [,1] [,2] [,3]
    [1,]    1   .5   .25
    [2,]   .5    1    .5
    [3,]  .25   .5     1

我的教授也暗示过,使用外部函数会使这更容易,我真的不知道该怎么做,我尝试使用 upper.tri 和 lower.tri 函数,但我不太成功那个。

我将非常感谢任何帮助。提前谢谢!

【问题讨论】:

  • 重新“有多少种方法?”另一种方式是,例如mat[2:4, 2:4]。重新“替换”可能会查看相关文档,help.search("replace", package="base")

标签: r matrix replace diagonal


【解决方案1】:

如果您准备好替换矩阵:

mat<-diag(10)
replacement <- matrix(c(1,.5,.25,.5,1,.5,.25,.5,1), nrow=3, byrow=T)
mat[c(1,2,3),c(1,2,3)] <- replacement

将其放入 for 循环中以跨越整个对角线

for(idx in 1:8){
    mat[c(idx,idx+1,idx+2),c(idx,idx+1,idx+2)] <- replacement
}
mat
      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
 [1,] 1.00 0.50 0.25 0.00 0.00 0.00 0.00 0.00 0.00  0.00
 [2,] 0.50 1.00 0.50 0.25 0.00 0.00 0.00 0.00 0.00  0.00
 [3,] 0.25 0.50 1.00 0.50 0.25 0.00 0.00 0.00 0.00  0.00
 [4,] 0.00 0.25 0.50 1.00 0.50 0.25 0.00 0.00 0.00  0.00
 [5,] 0.00 0.00 0.25 0.50 1.00 0.50 0.25 0.00 0.00  0.00
 [6,] 0.00 0.00 0.00 0.25 0.50 1.00 0.50 0.25 0.00  0.00
 [7,] 0.00 0.00 0.00 0.00 0.25 0.50 1.00 0.50 0.25  0.00
 [8,] 0.00 0.00 0.00 0.00 0.00 0.25 0.50 1.00 0.50  0.25
 [9,] 0.00 0.00 0.00 0.00 0.00 0.00 0.25 0.50 1.00  0.50
[10,] 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.25 0.50  1.00

【讨论】:

    猜你喜欢
    • 2014-11-29
    • 2021-02-19
    • 1970-01-01
    • 1970-01-01
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-10
    相关资源
    最近更新 更多