Como faço para redimensionar uma matriz no Matlab?
Pergunta
Suponha que eu tivesse um 1 por 12 Matrix e eu queríamos redimensioná -lo para um 4 por 3 matriz. Como eu poderia fazer isso?
Minha solução atual é meio feia:
for n = 1:(length(mat)/3)
out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end
Existe uma maneira melhor de fazer isso?
Solução
reshape
é obviamente a solução adequada, conforme declarado por @gnovice.
Uma boa característica de reshape
é isso permite isto:
A = 1:12;
B = reshape(A,4,[]);
B =
1 5 9
2 6 10
3 7 11
4 8 12
Então, se você não sabe quantas colunas haverá, reshape
vai calcular para você. Da mesma maneira, reshape
preencherá o número de linhas, se você deixar isso de fora.
C = reshape(A,[],4)
C =
1 4 7 10
2 5 8 11
3 6 9 12
Outras dicas
Tente o Remodelar função:
A = (1-by-12 matrix);
B = reshape(A,4,3);
Observe que a matriz B será preenchido com elementos de UMA De maneira coluna, isto é, as colunas serão preenchidas de cima para baixo, movendo -se para a esquerda para a direita).
Exemplo:
>> A = 1:12;
>> B = reshape(A,4,3)
B =
1 5 9
2 6 10
3 7 11
4 8 12
Para estender a solução de Gnovice:
Se você precisar de uma ordem diferente de construção da matriz, use Transpose (o 'operador) ou permute()
para mudar a ordem da dimensão depois que você ligou reshape()
.