将列向量转换为扩展对角矩阵
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)
考虑以下列向量:
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)