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?

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top