将列向量转换为扩展对角矩阵

时间:2019-10-01 09:11:51

标签: r matrix vector diagonal

考虑以下列向量:

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,但是我不太确定该怎么做。我该如何提高效率?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

我认为您的方法已经足够好,这是初始化矩阵并使用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))