Преобразование каждой ячейки массива в одну блочную диагональную матрицу в MATLAB
У меня есть массив ячеек, где каждая ячейка содержит различный размер квадратной матрицы смежности (в MATLAB), например
A = 29x29 double
30x30 double
24x24 double
10x10 double
Теперь я хочу создать диагональную матрицу B из одного блока из каждой ячейки A так, чтобы каждая ячейка 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
1 ответ
Просто используйте 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