Как изменить размер матрицы в MATLAB? - PullRequest
8 голосов
/ 27 апреля 2009

Предположим, у меня была матрица 1 на 12 , и я хотел изменить ее размер до матрицы 4 на 3 . Как я мог это сделать?

Мое текущее решение довольно уродливо:

for n = 1:(length(mat)/3)
    out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end

Есть ли лучший способ сделать это?

Ответы [ 3 ]

24 голосов
/ 27 апреля 2009

reshape является, конечно, правильным решением, как указано @gnovice.

Приятной особенностью reshape является то, что она позволяет:

A = 1:12;
B = reshape(A,4,[]);
B =
     1     5     9
     2     6    10
     3     7    11
     4     8    12

Так что, если вы не знаете, сколько будет столбцов, reshape рассчитает это для вас. Аналогично, reshape заполнит количество строк, если вы пропустите это.

C = reshape(A,[],4)
C =
     1     4     7    10
     2     5     8    11
     3     6     9    12
12 голосов
/ 27 апреля 2009

Попробуйте функцию RESHAPE :

A = (1-by-12 matrix);
B = reshape(A,4,3);

Обратите внимание, что матрица B будет заполнена элементами из A по столбцам (т. Е. Столбцы будут заполняться сверху вниз, двигаясь слева направо).

Пример:

>> A = 1:12;
>> B = reshape(A,4,3)

B =

     1     5     9
     2     6    10
     3     7    11
     4     8    12
9 голосов
/ 27 апреля 2009

, чтобы расширить решение gnovice:

Если вам нужен другой порядок построения матрицы, используйте transpose (оператор ') или permute(), чтобы изменить порядок измерений после того, как вы вызвали reshape().

...