Объявление многомерного массива в одном выражении - PullRequest
4 голосов
/ 18 марта 2011

Допустим, я хочу создать матрицу A с размерами 3 × 4 × 4 с одним оператором ( т.е. одно равенство, без каких-либо объединений), что-то вроде этого:

%// This is one continuous row
A = [ [ [3 3 4 4], [8 11 8 7], [4 4 6 7], [4 7 6 6] ];  ...
      [ [3 2 4 2], [9 6 4 12], [4 3 3 4], [5 10 7 3] ]; ...
      [ [2 2 1 2], [3 3 3 2], [2 2 2 2],  [3 3 3 3] ] ]

Ответы [ 2 ]

6 голосов
/ 23 мая 2013

Вы можете использовать cat для "наложения" двухмерных матриц вдоль третьего измерения, например:

A = cat(3, ones(4), 2*ones(4), 3*ones(4));

Технически это конкатенация, но это все еще только одно назначение.

CATLAB

6 голосов
/ 18 марта 2011

Оператор конкатенации [] будет работать только в двух измерениях, например, [a b] для конкатенации по горизонтали или [a; b] для конкатенации по вертикали. Для создания матриц с более высокими размерами вы можете использовать функцию reshape или инициализировать матрицу нужного размера и затем заполнить ее своими значениями. Например, вы можете сделать это:

A = reshape([...], [3 4 4]);  % Where "..." is what you have above

Или это:

A = zeros(3, 4, 4);  % Preallocate the matrix
A(:) = [...];        % Where "..." is what you have above
...