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

arrays matlab multidimensional-array matrix n-dimensional

10764 просмотра

3 ответа

36585 Репутация автора

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

Автор: Tomas Aschan Источник Размещён: 19.04.2011 05:09

Ответы (3)


2 плюса

1455 Репутация автора

reshape(myArray(myIndex,:,:),[100,50])
Автор: fdermishin Размещён: 19.04.2011 05:11

14 плюса

37874 Репутация автора

Решение

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

Пример:

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

ans =

    50   100

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

Автор: abcd Размещён: 19.04.2011 05:13

0 плюса

33411 Репутация автора

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

A=randn(4,50,100);
B=permute(A(1,:,:),[2,3,1])
Автор: Daniel Размещён: 05.02.2016 02:08
Вопросы из категории :
32x32