Come faccio a ridimensionare una matrice in MATLAB?

Supponiamo che ho avuto un 1-by-12 matrice e ho voluto ridimensionare di 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?

OriginaleL’autore bastibe | 2009-04-27

3 Replies
  1. 24

    reshape è, naturalmente, la soluzione corretta, come indicato da @gnovice.

    Una bella caratteristica di reshape è che permette questo:

    A = 1:12;
    B = reshape(A,4,[]);
    B =
         1     5     9
         2     6    10
         3     7    11
         4     8    12

    Quindi, se non sapete quante colonne ci sarà, reshape calcolerà per voi. Allo stesso modo, reshape riempirà il numero di righe, se si lascia che.

    C = reshape(A,[],4)
    C =
         1     4     7    10
         2     5     8    11
         3     6     9    12
    +1: Bello! E non ho mai notato prima. Credo che non ho mai dovuto usarlo.

    OriginaleL’autore

  2. 12

    Provare il RIMODELLARE funzione:

    A = (1-by-12 matrix);
    B = reshape(A,4,3);

    Nota che la matrice B sarà riempito con elementi Un in un columnwise moda (cioè le colonne di essere riempito dall’alto verso il basso, lo spostamento da 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
    Nota che la rimodellare restituisce un errore se non sono esattamente 4*3 elementi.
    Sì, che è il normale comportamento previsto di RIMODELLARE.
    Non possiamo dire ritornare ad aggiungere zeri se non ci sono esattamente 4*3 elementi? Intendevo se ci sono meno di 12 elementi.
    No, ma è fare invece: A = 1:11; B = zeros(4,3); B(1:numel(A)) = A;
    Sì, che riempirà B columnwise. Se si desidera riempire rowwise, vorrei fare questo: A = 1:11; B = zeros(3,4); B(1:numel(A)) = A; B = B.';

    OriginaleL’autore gnovice

  3. 9

    per estendere gnovice soluzione:

    Se avete bisogno di un diverso ordine di costruzione di matrice, uso transpose (l’operatore) o permute() per modificare la dimensione di ordinazione, dopo aver chiamato reshape().

    +1: un Buon punto di recepimento e PERMUTE. Questi sono a volte necessari dopo un rimodellare.

    OriginaleL’autore Jason S

Lascia un commento