如何使用对角线中的块创建对角矩阵,每个块具有不同的矩阵?

时间:2017-07-16 05:16:14

标签: r matrix

我想创建一个块对角矩阵,如下所示:

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.谢谢!

1 个答案:

答案 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)