Как получить два последних измерения массива ND в виде двумерного массива? - PullRequest
12 голосов
/ 19 апреля 2011

У меня есть 3D-массив в MATLAB, с size(myArray) = [100 100 50]. Теперь я хотел бы получить определенный слой, определенный индексом в измерении first , в виде 2D-матрицы. Я попытался myMatrix = myArray(myIndex,:,:);, но это дает мне 3D-массив с size(myMatrix) = [1 100 50].

Как мне сказать MATLAB, что меня не интересует первое измерение (поскольку там только один слой), чтобы оно могло упростить матрицу?

Примечание: мне нужно будет сделать это и со вторым индексом, отображая size(myMatrix) = [100 1 50] вместо желаемого [100 50]. Решение должно быть применимо к обоим случаям и, предпочтительно, к третьему измерению.

Ответы [ 3 ]

14 голосов
/ 19 апреля 2011

Используйте функцию squeeze, которая удаляет одноэлементные размеры.

Пример:

A=randn(4,50,100);
B=squeeze(A(1,:,:));
size(B)

ans =

    50   100

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

2 голосов
/ 19 апреля 2011
reshape(myArray(myIndex,:,:),[100,50])
0 голосов
/ 05 февраля 2016

squeeze, reshape и permute, вероятно, три наиболее важные функции при работе с матрицами ND.Просто для примера, как использовать третью функцию:

A=randn(4,50,100);
B=permute(A(1,:,:),[2,3,1])
...