Как получить два последних размера массива 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]
. Решение должно быть применимо и к обоим случаям, и предпочтительно к третьему измерению.
Ответы
Ответ 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])