Come faccio a ridimensionare una matrice in MATLAB?
Domanda
Supponiamo avevo un 1-by-12 matrice e volevo ridimensionare ad un 4-by-3 matrice. Come potrei fare questo?
La mia soluzione attuale è una specie di brutto:
for n = 1:(length(mat)/3)
out(n,1:3) = mat( ((n-1)*3 + 1):((n-1)*3 + 3) );
end
C'è un modo migliore per fare questo?
Soluzione
reshape
è, naturalmente, la soluzione adeguata, come affermato da @gnovice .
Una bella caratteristica di reshape
è che permette a questo:
A = 1:12;
B = reshape(A,4,[]);
B =
1 5 9
2 6 10
3 7 11
4 8 12
Quindi, se non si sa quante colonne vi sarà, reshape
calcolerà per voi. Allo stesso modo, reshape
riempirà il numero di righe, se si lascia che fuori.
C = reshape(A,[],4)
C =
1 4 7 10
2 5 8 11
3 6 9 12
Altri suggerimenti
Prova il Reshape funzione:
A = (1-by-12 matrix);
B = reshape(A,4,3);
Si noti che la matrice B sarà riempito con elementi da A in modo columnwise (cioè colonne vengono riempite dall'alto verso il basso, spostandosi a sinistra a destra).
Esempio:
>> A = 1:12;
>> B = reshape(A,4,3)
B =
1 5 9
2 6 10
3 7 11
4 8 12
di estendere la soluzione di gnovice:
Se avete bisogno di un diverso ordine di costruzione della matrice, l'uso di trasposizione (il 'operatore) o permute()
per cambiare l'ordinamento dimensione dopo aver chiamato reshape()
.