Как изменить размер матрицы в MATLAB?

Предположим, у меня был 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 ответов


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

попробовать изменить функция:

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

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

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