我想创建一个块对角矩阵,如下所示:
M
A1 0 0 0 0
0 A2 0 0 0
0 0 A3 0 0
0 0 0 A4 0
0 0 0 0 A5
每个0是零的矩阵,并且A1,A2,A3,A4,A5矩阵中的每一个是方阵,每个矩阵具有相同的尺寸,但具有不同的条目。
如果我知道每个矩阵A1,A2,A3,A4,A5都是已知的,是否有办法生成如此大的块对角矩阵而不需要求助于循环?
我希望找到一个适用于任意数量矩阵的解决方案,希望不仅仅是5.谢谢!
答案 0 :(得分:3)
将矩阵放在bdiag
后,我们可以使用Matrix
中的list
来获取sparseMatrix
。
library(Matrix)
sM <- bdiag(mget(paste0("A", 1:5)))
sM
# 10 x 10 sparse Matrix of class "dgCMatrix"
# [1,] 1 3 . . . . . . . .
# [2,] 2 4 . . . . . . . .
# [3,] . . 5 7 . . . . . .
# [4,] . . 6 8 . . . . . .
# [5,] . . . . 9 11 . . . .
# [6,] . . . . 10 12 . . . .
# [7,] . . . . . . 13 15 . .
# [8,] . . . . . . 14 16 . .
# [9,] . . . . . . . . 17 19
#[10,] . . . . . . . . 18 20
如果需要,sparseMatrix
可以转换为matrix
as.matrix(sM)
A1 <- matrix(1:4, 2, 2)
A2 <- matrix(5:8, 2, 2)
A3 <- matrix(9:12, 2, 2)
A4 <- matrix(13:16, 2, 2)
A5 <- matrix(17:20, 2, 2)