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