Представление трехмерного массива в виде блочно-диагональной матрицы - PullRequest
0 голосов
/ 10 января 2020

Для 3-мерного массива A: каждый срез представляет собой матрицу An. Я хотел бы представить A в виде блок-диагональной матрицы следующим образом:

diag matrix

Как реализовать это в MATLAB?

Ответы [ 2 ]

2 голосов
/ 10 января 2020

Вы можете сделать это следующим образом:

  1. Преобразовать трехмерный массив в массив ячеек срезов 3-го измерения, используя num2cell;
  2. Создать разделенный запятыми список из массива ячеек; и
  3. Передайте это blkdiag:

A(:,:,1) = [10 20 30; 40 50 60];
A(:,:,2) = A(:,:,1) + 100;
A(:,:,3) = A(:,:,1) + 200; % example 3D array
t = num2cell(A, [1 2]); % step 1
result = blkdiag(t{:}); % steps 2 and 3

Это дает

result =
    10    20    30     0     0     0     0     0     0
    40    50    60     0     0     0     0     0     0
     0     0     0   110   120   130     0     0     0
     0     0     0   140   150   160     0     0     0
     0     0     0     0     0     0   210   220   230
     0     0     0     0     0     0   240   250   260
0 голосов
/ 10 января 2020

Вы имеете в виду что-то подобное?

[a1,a2,a3] = size(a)
b{1,1} = a(:,:,1)   
b{2,2} = a(:,:,2)
b{3,3} = a(:,:,3)

Вам нужно хранить матрицу в виде ячейки матрицы (обозначается скобками "{}")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...