在 Matlab 中创建稀疏块对角矩阵

Creating a sparse block diagonal matrix in Matlab

假设 B 是 Matlab 中的稀疏矩阵元胞数组,我想形成一个稀疏块对角矩阵 M,其对角块是存储在 B 中的矩阵。最简单/最有效的方法是什么?

使用blkdiag on a comma-separated list从元胞数组生成:

result = blkdiag(B{:});

例如,

B = {sparse([1 0 0; 2 2 0; 3 3 3]), 4*speye(2)};

这会产生

>> result
result =
   (1,1)        1
   (2,1)        2
   (3,1)        3
   (2,2)        2
   (3,2)        3
   (3,3)        3
   (4,4)        4
   (5,5)        4
>> full(result)
ans =
     1     0     0     0     0
     2     2     0     0     0
     3     3     3     0     0
     0     0     0     4     0
     0     0     0     0     4