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

Convert a column vector into a extended diagonal matrix

考虑以下列向量:

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,但我不太确定该怎么做。我怎样才能更有效率?

我认为你的方法已经足够好了,这是另一种方法,通过初始化矩阵并使用 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))

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

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