Matlab: диагонализация N-мерного массива для формирования диагональной матрицы - PullRequest
0 голосов
/ 11 декабря 2019

Мне нужно сформировать диагональную матрицу из трехмерного массива:

учитывая A =rand(2,2,5). B - это матрица, диагональными элементами которой являются срезы A

A имеет следующие срезы: a1, a2, a3, a4 и a5, срезы 2 x 2.

B должен выглядеть так:

[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]

Я реализовал это как:

lambda=[];

for m=1:N
    l=A(:,:,m);
    lambda = [lambda; l];

end

Это формирует матрицу 10 x 2. Где моя ошибка?

1 Ответ

3 голосов
/ 11 декабря 2019

Для этого есть встроенная функция: blkdiag :

% random matrice
A = rand(2,2,5)
% split A into 2D matrix (or slice) we preserve the 1st and 2nd dimension
C = num2cell(A,[1 2])
% block diagonalize
B = blkdiag(C{:})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...