Cancellare gli elementi di una matrice in MATLAB

In questa lezione vedremo come cancellare elementi da un vettore o da una matrice in MATLAB.

Nelle precedenti lezioni abbiamo visto come creare matrici e vettori, come modificarne gli elementi e come modificarne le dimensioni. Ci rimane da studiare come poter cancellare elementi da essi.

Per poter fare questo è tuttavia necessario introdurre un particolare tipo di vettori: i vettori vuoti in MATLAB.

Vettore vuoto

In MATLAB esiste la possibilità di creare un vettore vuoto, ossia un vettore che non contiene alcun elemento. Per farlo la sintassi è la seguente:

>> v = []

v =

     []

>> length(v)

ans =

     0

>> size(v)

ans =

     0     0

Specificando il contenuto del vettore in questo modo abbiamo creato un vettore privo di elementi con dimensione pari a 0.

Aggiungere elementi ad un vettore vuoto

Possiamo aggiungere elementi al vettore vuoto semplicemente utilizzando la concatenazione che abbiamo visto nelle lezioni precedenti.

Ad esempio, volendo aggiungere l'elemento 5 al vettore vuoto creato sopra, possiamo usare la sintassi che segue:

>> v = [v 5]

v =

     5

>> length(v)

ans =

     1

Con questa sintassi abbiamo specificato che il nuovo vettore v è composto dal vecchio vettore v concatenato con l'elemento 5. Come si vede dall'esempio, ora il vettore v è composto da un solo elemento.

Possiamo continuare il procedimento a piacimento aggiungendo nuovi elementi. Ad esempio, volendo aggiungere l'elemento 21, possiamo agire nel modo seguente:

>> v = [v 21]

v =

     5    21

>> length(v)

ans =

     2

Così facendo, ora il vettore v è di due elementi.

Un vettore vuoto, quindi, può essere utilizzato come contenitore per aggiungere elementi. Più avanti, quando entreremo nel dettaglio della programmazione in MATLAB, vedremo che la capacità di aggiungere elementi dinamicamente ad un vettore ci tornerà molto utile.

Cancellare elementi da un vettore

Uno degli utilizzi principali del vettore vuoto, tuttavia, è quello di poter cancellare gli elementi da un vettore.

Per far questo è sufficiente assegnare all'indice del vettore desiderato il vettore vuoto. Proviamo con un esempio. Abbiamo un vettore di 4 elementi:

>> v = [4 16 28 33]

v =

     4    16    28    33

Vogliamo rimuovere il secondo elemento e trasformare il vettore in un vettore da 3 elementi. Per farlo basta assegnare al secondo elemento del vettore, v(2), il vettore vuoto, in questo modo:

>> v(2) = []

v =

     4    28    33

>> length(v)

ans =

     3

La stessa tecnica si può adoperare per cancellare più di un elemento da un vettore. Basta specificare, anziché un singolo indice, più indici del vettore stesso.

Ad esempio, se abbiamo un vettore di 5 elementi come il seguente:

>> v = [3 6 9 12 15]

v =

     3     6     9    12    15

Volendo cancellare il secondo e il quarto elemento, è sufficiente inserire il seguente comando:

>> v([2 4]) = []

v =

     3     9    15

In questo modo, specificando gli indici multipli e assegnando agli elementi corrispondenti il vettore vuoto, abbiamo effettivamente cancellato in un colpo solo due elementi. A questo punto il vettore è composto da soli 3 elementi.

Ricapitolando:

Definizione

Cancellare elementi da un vettore in MATLAB

Per cancellare un elemento da un vettore in MATLAB è sufficiente selezionare l'elemento richiesto con l'indice corrispondente e assegnargli il vettore vuoto.

Per cancellare l'elemento i-esimo dal vettore v la sintassi è:

v(i) = [];

Si possono cancellare più elementi da un vettore contemporaneamente specificando un sotto-vettore.

Cancellare elementi da una matrice

Cancellare elementi da una matrice è simile al caso di un vettore ma bisogna usare degli accorgimenti in più.

Infatti, da una matrice non può essere cancellato un singolo elemento. Il motivo è che la matrice deve necessariamente avere righe della stessa lunghezza e colonne della stessa lunghezza. Provare a cancellare un singolo elemento da una matrice comporterebbe un errore:

>> A = [2 4; 6 8]

A =

     2     4
     6     8

>> A(2,2) = []
A null assignment can have only one non-colon index.

Tuttavia è sempre possibile rimuovere intere colonne o intere righe dalla matrice. Basta usare l'operatore di iterazione per indicizzare sotto-matrici.

Per comprendere meglio vediamo un esempio. Supponiamo di avere una matrice 3x3 come la seguente:

>> A = randi(3, 3)

A =

     3     2     2
     1     1     3
     3     1     3

Da questa matrice vogliamo cancellare la seconda colonna. Per farlo è sufficiente usare l'operatore di iterazione per selezionare la sotto-matrice, in questo caso la seconda colonna, ed assegnargli il vettore vuoto:

>> A(:,2) = []

A =

     3     2
     1     3
     3     3

Lo stesso vale per le righe. Possiamo togliere, infatti, alla matrice A, che ora è una matrice 3x2, la seconda riga in questo modo:

>> A(2,:) = []

A =

     3     2
     3     3

Ottenendo, così, una matrice 2x2.

Usando l'operatore di iterazione, possiamo cancellare anche più righe o colonne in un colpo solo. Ad esempio, supponiamo di avere la matrice 4x4 che segue:

>> B = randi(4,4)

B =

     1     4     4     4
     4     1     4     4
     4     2     3     3
     2     4     1     4

Vogliamo cancellare le righe 2 e 3 e vogliamo cancellare anche la colonna 4. Non si possono cancellare righe e colonne allo stesso tempo. Per cui dobbiamo agire in due passi. Dapprima cancelliamo le righe 2 e 3, in questo modo:

>> B(2:3,:) = []

B =

     1     4     4     4
     2     4     1     4

Successivamente, cancelliamo la colonna 4 in questo modo:

>> B(:,4) = []

B =

     1     4     4
     2     4     1

Il risultato è una matrice 2x3 come c'era da aspettarsi.

Ricapitolando:

Definizione

Cancellare elementi da una matrice in MATLAB

In MATLAB, non si possono cancellare elementi singoli da una matrice.

Si possono cancellare solo righe o colonne intere. Per farlo bisogna selezionare la sotto-matrice corrispondente alla riga o alla colonna con l'operatore di iterazione e assegnargli il vettore vuoto.

Per cancellare la riga m dalla matrice A la sintassi è:

A(m,:) = [];

Per cancellare la colonna n dalla matrice A la sintassi è:

A(:,n) = [];

Possono essere cancellate anche più righe o più colonne con un singolo assegnamento, ma non si possono cancellare più righe e colonne insieme.

Cancellare un elemento da una matrice usando l'indicizzazione lineare

Usando l'indicizzazione lineare è comunque possibile cancellare un singolo elemento da una matrice. Tuttavia, facendo così la matrice collassa in un vettore riga.

Supponiamo, ad esempio, di avere una matrice 3x3:

>> A = randi(3,3)

A =

     3     1     1
     2     3     1
     2     1     1

Usando l'indicizzazione lineare, proviamo a cancellare il "quarto" elemento, in questo modo:

>> A(4) = []

A =

     3     2     2     3     1     1     1     1

>> length(A)

ans =

     8

Come si può osservare, l'elemento è stato eliminato, tuttavia la matrice 3x3, che aveva 9 elementi, si è trasformata in un vettore riga di 8 elementi.

In sintesi

In questa lezione abbiamo introdotto i vettori vuoti in MATLAB. Essi vengono spesso usati come contenitori data la natura dinamica dei vettori MATLAB nei programmi.

Un loro utilizzo fondamentale è quello di poter eliminare elementi da un vettore. Infatti, assegnando un vettore vuoto ad uno o più elementi di un vettore effettivamente li si cancella.

Allo stesso modo si possono cancellare intere righe o colonne di una matrice in MATLAB assegnando loro il vettore vuoto. Di una matrice non si può cancellare un singolo elemento a meno che non si usa l'indicizzazione lineare. Tuttavia, in questo modo la matrice collassa in un vettore riga.