Нужна помощь в понимании команды MATLAB `cat` в больших размерах - PullRequest
2 голосов
/ 09 апреля 2010

Команды

a = magic(3);
b = pascal(3); 
c = cat(4,a,b);

создает массив 3 на 3 на 1 на 2.

Почему результат 3-3-1-2, если размерность 4?

1 Ответ

1 голос
/ 09 апреля 2010

И a, и b - это двумерные матрицы размером 3 на 3. Когда вы объединяете их по четвертому измерению, промежуточное третье измерение является синглтоном (т.е. 1). Таким образом, c(:,:,1,1) будет вашей матрицей a, а c(:,:,1,2) будет вашей матрицей b.

Вот ссылка на некоторую документацию , которая может помочь в понимании многомерных массивов.

EDIT:

Возможно, это поможет подумать об этих четырех измерениях в терминах, к которым нам, людям, легче относиться ...

Предположим, что четыре измерения в примере представляют три измерения в пространстве (x, y и z) плюс время четвертого измерения. Представьте, что я измеряю температуру воздуха в нескольких точках пространства за один раз. Я могу измерять температуру воздуха в сетке, которая включает все комбинации трех позиций x, трех позиций y и одной позиции z. Это даст мне сетку 3 на 3 на 1. Обычно мы, вероятно, просто скажем, что данные находятся в сетке 3 на 3, игнорируя конечное одноэлементное измерение.

Однако, допустим, я сейчас возьму другой набор образцов в этих точках позднее. Поэтому я получаю другую сетку 3 на 3 на 1 во второй момент времени. Если я объединю эти наборы данных вместе во временном измерении, я получу матрицу 3 на 3 на 1 на 2. Третье измерение одноэлементное, потому что я выбрал только одно значение z.

Итак, в примере c=cat(4,a,b) мы объединяем две матрицы вдоль четвертого измерения. Две матрицы имеют размер 3 на 3, при этом третье измерение подразумевается как одноэлементное. Однако при конкатенации по четвертому измерению нам в конечном итоге приходится явно показывать, что третье измерение все еще там, указав его размер как 1.

...