Подтвердить что ты не робот

Как получить два последних размера массива N-D в виде 2D-массива?

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

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

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

4b9b3361

Ответ 1

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

Пример:

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

ans =

    50   100

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

Ответ 2

reshape(myArray(myIndex,:,:),[100,50])

Ответ 3

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

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