考虑以下列向量:
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
,但是我不太确定该怎么做。我该如何提高效率?
答案 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))