Matlab: создание (k + 1) -тенора из списка k-тензоров - PullRequest
2 голосов
/ 07 августа 2011

Предположим, вам дано множество k-тензоров, для простоты, скажем, они являются 2-тензорами / матрицами:

 X = rand(5,5); Y = rand(5,5);

Существует ли идиома для объединения их в 3-тензор, гдепервое измерение индексирует матрицу?Один из способов сделать это -

P(1,:,:) = X;
P(2,:,:) = Y;

, и теперь P имеет необходимые размеры 2x5x5.Есть лучший способ сделать это?Например, в numpy можно просто набрать:

P = array((X,Y))

, но при наборе в matlab P=[X Y] или P=[X; Y] даст матрицы 10x5 и 5x10 соответственно, а не предполагаемый 2x5x5.

Ответы [ 2 ]

4 голосов
/ 07 августа 2011

Используйте команду cat.

Предположим, у вас есть 5 матриц размера (x,y,z),

A = rand(x,y,z); B = rand(x,y,z); C = rand(x,y,z); D = rand(x,y,z); E = rand(x,y,z);

Связанная матрица будет

M = cat(4, A, B, C, D, E);

, где 4 относится к 4-му измерению. Выход M имеет размер (x,y,z,5). В MATLAB каждая из матриц A,B,... имеет размер (x,y,z,1,1,...), то есть их 4-х мерная длина равна 1.


После объединения может потребоваться изменить порядок индексов измерений, чтобы первое измерение было вновь созданным измерением. Используйте команду permute.

N = permute(M, [4, 1, 2, 3]);

Выходная матрица N имеет размер (5,x,y,z).


История изменений

  1. Изменен размер входной матрицы с (3,3,3) до (x,y,z), чтобы четко различать каждое измерение во время конкатенации и перестановки.
  2. Добавлено permute, что было необходимо для удовлетворения требования к размерному индексу OP.
1 голос
/ 07 августа 2011

Как правило, массивы ячеек в MATLAB эквивалентны спискам Python (они могут хранить объекты разных типов), поэтому вы можете написать:

%# combine
P = {X Y};     %# or: P = {X;Y};

%# access the elements
P{1}
P{2}

В этом случае (матрицы одинакового размера и типа) и, как показало @ rwong , конкатенация по новому измерению - это, вероятно, путь ...

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