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

lit*_*leO 5 matlab matrix sparse-matrix

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

Lui*_*ndo 3

用于从元胞数组生成的逗号分隔列表blkdiag

result = blkdiag(B{:});
Run Code Online (Sandbox Code Playgroud)

例如,与

B = {sparse([1 0 0; 2 2 0; 3 3 3]), 4*speye(2)};
Run Code Online (Sandbox Code Playgroud)

这会产生

>> 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
Run Code Online (Sandbox Code Playgroud)