【问题标题】:Convert a column vector into a extended diagonal matrix将列向量转换为扩展对角矩阵
【发布时间】:2020-01-30 13:20:56
【问题描述】:

考虑以下列向量:

vec <- rbind(c(0.5),c(0.6))

我想把它转换成下面的 4x4 对角矩阵:

0.5   0   0    0 
  0 0.6   0    0 
  0   0 0.5    0
  0   0   0  0.6

我知道我可以通过以下代码做到这一点:

dia <- diag(c(vec,vec))

但是如果我想把它转换成一个 1000x1000 的对角矩阵呢?那么上面的代码就是这么高效。也许我可以使用rep,但我不完全确定该怎么做。怎样才能更有效率?

【问题讨论】:

    标签: r matrix vector diagonal


    【解决方案1】:

    这是使用回收的另一种方式:

    diag(c(vec), length(vec)*2)
    

    【讨论】:

      【解决方案2】:

      我认为您的方法已经足够好了,这是另一种方法,初始化矩阵并使用rep 填充对角线。

      n <- 4
      mat <- matrix(0, ncol = n, nrow = n)
      diag(mat) <- rep(vec, n/2)
      
      mat
      #     [,1] [,2] [,3] [,4]
      #[1,]  0.5  0.0  0.0  0.0
      #[2,]  0.0  0.6  0.0  0.0
      #[3,]  0.0  0.0  0.5  0.0
      #[4,]  0.0  0.0  0.0  0.6
      

      按照你的方法你可以做

      diag(rep(vec, n/2))
      

      【讨论】:

      • 只是一个小注释,但使用rep(vec, n/2) 可能会更好:)
      • 是的,这是一个很好的说明 :-) 谢谢你们!
      • 感谢@tmfmnk,我认为vec 的大小将永远是n/2
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 2014-03-09
      相关资源
      最近更新 更多