Contenuto principale

Rimodellamento e riorganizzazione degli array

Molta funzioni in MATLAB® possono estrarre gli elementi di un array esistente e inserirli in una forma o sequenza diversa. Questo può essere utile per pre-elaborare i dati per calcoli successivi o per analizzarli.

Rimodellamento

La funzione reshape modifica la grandezza e la forma di un array. Ad esempio, rimodellare una matrice 3x4 in una matrice 2x6.

A = [1 4 7 10; 2 5 8 11; 3 6 9 12]
A = 3×4

     1     4     7    10
     2     5     8    11
     3     6     9    12

B = reshape(A,2,6)
B = 2×6

     1     3     5     7     9    11
     2     4     6     8    10    12

Finché il numero di elementi in ciascuna forma è lo stesso, è possibile rimodellarli in un array con qualsiasi numero di dimensioni. Utilizzando gli elementi di A, creare un array multidimensionale 2x2x3.

C = reshape(A,2,2,3)
C = 
C(:,:,1) =

     1     3
     2     4


C(:,:,2) =

     5     7
     6     8


C(:,:,3) =

     9    11
    10    12

Trasposizione e capovolgimento

Un'attività comune nell'algebra lineare è lavorare con la trasposizione di una matrice, che trasforma le righe in colonne e le colonne in righe. A tale scopo, utilizzare la funzione transpose o l'operatore .'.

Creare una matrice 3x3 e calcolane la trasposizione.

A = magic(3)
A = 3×3

     8     1     6
     3     5     7
     4     9     2

B = A.'
B = 3×3

     8     3     4
     1     5     9
     6     7     2

Un operatore simile ', calcola la trasposizione coniugata per le matrici complesse. Questa operazione calcola il coniugato complesso di ciascun elemento e lo traspone. Creare una matrice complessa 2x2 e calcolarne la trasposizione coniugata.

A = [1+i 1-i; -i i]
A = 2×2 complex

   1.0000 + 1.0000i   1.0000 - 1.0000i
   0.0000 - 1.0000i   0.0000 + 1.0000i

B = A'
B = 2×2 complex

   1.0000 - 1.0000i   0.0000 + 1.0000i
   1.0000 + 1.0000i   0.0000 - 1.0000i

flipud capovolge le righe di una matrice in direzione dall'alto verso il basso, mentre fliplr mentre capovolge le colonne in direzione da sinistra verso destra.

A = [1 2; 3 4]
A = 2×2

     1     2
     3     4

B = flipud(A)
B = 2×2

     3     4
     1     2

C = fliplr(A)
C = 2×2

     2     1
     4     3

Spostamento e rotazione

È possibile spostare gli elementi di un array di un determinato numero di posizioni utilizzando la funzione circshift. Ad esempio, creare una matrice 3x4 e spostare le colonne verso destra di 2 posizioni. Il secondo argomento [0 2] indica a circshift di spostare le righe di 0 posizioni e di spostare le colonne di 2 posizioni verso destra.

A = [1 2 3 4; 5 6 7 8; 9 10 11 12]
A = 3×4

     1     2     3     4
     5     6     7     8
     9    10    11    12

B = circshift(A,[0 2])
B = 3×4

     3     4     1     2
     7     8     5     6
    11    12     9    10

Per spostare le righe di A di 1 posizione verso l'alto e mantenere le colonne nella stessa posizione, specificare il secondo argomento come [-1 0].

C = circshift(A,[-1 0])
C = 3×4

     5     6     7     8
     9    10    11    12
     1     2     3     4

La funzione rot90 può ruotare una matrice in senso antiorario di 90 gradi.

A = [1 2; 3 4]
A = 2×2

     1     2
     3     4

B = rot90(A)
B = 2×2

     2     4
     1     3

Se si esegue la rotazione altre 3 volte utilizzando il secondo argomento per specificare il numero di rotazioni, si ottiene la matrice originale A.

C = rot90(B,3)
C = 2×2

     1     2
     3     4

Ordinamento

Anche l'ordinamento dei dati in un array rappresenta uno strumento prezioso e MATLAB offre diversi approcci per eseguirlo. Ad esempio, la funzione sort ordina separatamente gli elementi di ciascuna riga o colonna di una matrice in ordine crescente o decrescente. Creare una matrice A e ordinare ciascuna colonna di A in ordine crescente.

A = magic(4)
A = 4×4

    16     2     3    13
     5    11    10     8
     9     7     6    12
     4    14    15     1

B = sort(A)
B = 4×4

     4     2     3     1
     5     7     6     8
     9    11    10    12
    16    14    15    13

Ordinare ciascuna riga in ordine decrescente. Il secondo valore dell'argomento 2 specifica che si desidera un ordinamento per riga.

C = sort(A,2,'descend')
C = 4×4

    16    13     3     2
    11    10     8     5
    12     9     7     6
    15    14     4     1

Per ordinare intere righe o colonne relative tra loro, utilizzare la funzione sortrows. Ad esempio, ordinare le righe di A in ordine crescente in base agli elementi nella prima colonna. Le posizioni delle righe cambiano, ma l'ordine degli elementi in ciascuna riga viene mantenuto.

D = sortrows(A) 
D = 4×4

     4    14    15     1
     5    11    10     8
     9     7     6    12
    16     2     3    13

Vedi anche

Argomenti