在MATLAB中将数组的每个单元转换为一个块对角矩阵

问题描述 投票:0回答:1

我有一个单元格数组,其中每个单元格包含不同大小的方形邻接矩阵(例如在MATLAB中)

A = 29x29 double
      30x30 double 
      24x24 double 
      10x10 double

现在我想从A的每个单元创建一个块对角矩阵B,使得A的每个单元在B中的对角线中

 B = [29X29] 0 0 0 0 0 0 0 0  0 0
        0   0 [30x30] 0 0 0 0 0 0 0 
        0   0  0   0  [24X24] 0 0 0
        0   0  0   0   0   0 [10x10]

因此B将为NxN,其中N = 29 + 30 + 24 + 10

我尝试使用以下代码,但它没有用。

 function B =blockD(A)
n=size(A,1);
for i = 1:n
    B=blkdiag(A{i});
end
end

最后,我必须排列归一化矩阵B.

matlab cell-array adjacency-matrix blockdiag
1个回答
0
投票

只需使用B = blkdiag(A {:})

octave:4> A(1) = [1,2; 3, 4]
A = {3x1x3 Cell Array}
octave:5> A(2) = [1,2; 6, 4]
A = {3x1x3 Cell Array}
octave:6> A(3)  = [1, 7; 5 8]
A = {3x1x3 Cell Array}
octave:7> B = blkdiag(A{:})
B =

   1   2   0   0   0   0
   3   4   0   0   0   0
   0   0   1   2   0   0
   0   0   6   4   0   0
   0   0   0   0   1   7
   0   0   0   0   5   8
© www.soinside.com 2019 - 2024. All rights reserved.