Matlab, матрица массивов - PullRequest
       4

Matlab, матрица массивов

2 голосов
/ 22 октября 2011

Есть 3 матрицы A, B, C:

A=[0 1;2 3]
B=[4 5;6 7]
C=[8 9;10 11]

Как создать новую матрицу D (2,2), чтобы ее элементы были массивами типа

D = [{A(1,1), B(1,1), C(1,1)} {{A(1,2), B(1,2), C(1,12}; 
     {A(2,1), B(2,1), C(2,1)} {A(2,2), B(2,2), C(2,2)}]

Например: использование оператора D (1,1) дает результат

0, 4, 8

Скобки {} являются только иллюстративными и не представляют синтаксис Matlab ...

Ответы [ 2 ]

3 голосов
/ 23 октября 2011

Вы можете сложить матрицы по третьему измерению:

D = cat(3,A,B,C);

Тогда вы можете получить доступ как:

>> D(1,1,:)
ans(:,:,1) =
     0
ans(:,:,2) =
     4
ans(:,:,3) =
     8

, если хотите получить 1D-вектор:

>> squeeze(D(1,1,:))     %# or: permute(D(1,1,:),[1 3 2])
ans =
     0
     4
     8

Если вы предпочитаете использовать массивы ячеек, вот более простой способ его построения:

D = cellfun(@squeeze, num2cell(cat(3,A,B,C),3), 'UniformOutput',false);

, к которому можно получить доступ как:

>> D{1,1}
ans =
     0
     4
     8
1 голос
/ 22 октября 2011

Вы почти у цели:

D = [{[A(1,1), B(1,1), C(1,1)]} {[A(1,2), B(1,2), C(1,2)]};
     {[A(2,1), B(2,1), C(2,1)]} {[A(2,2), B(2,2), C(2,2)]}]

(видите дополнительные ветки?)

D теперь является массивом ячеек, каждая ячейка содержит матрицу 1x3.

Для доступа к массиву ячеек используйте следующий синтаксис:

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