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?

Foi útil?

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().

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top