Accedere agli elementi di un vettore in MATLAB

Nella lezione precedente abbiamo visto come creare vettori, riga o colonna, e matrici in MATLAB. In questa lezione vedremo come accedere ai loro elementi e come modificarli.

Accedere agli elementi di un vettore

Gli elementi di un vettore sono numerati in maniera sequenziale. Ciascun elemento ha associato un numero che prende il nome di indice o, a volte, pedice. In MATLAB, a differenza di altri linguaggi di programmazione, gli indici degli elementi di un vettore partono da 1.

Supponiamo di aver creato il seguente vettore v:

>> v = 0:5:30

v =

     0     5    10    15    20    25    30

Il vettore v è composto da 7 elementi. Per accedere ad uno degli elementi del vettore v è necessario specificare il nome del vettore seguito dall'indice racchiuso tra parentesi tonde. Ad esempio, per accedere al quarto elemento di v basta inserire la seguente espressione:

>> v(4)

ans =

    15

Ovviamente, nell'accedere agli elementi di un vettore, l'indice specificato deve essere sempre un intero positivo, altrimenti MATLAB ci segnalerà un errore:

>> v(-1)
Array indices must be positive integers or logical values.

>> v(2.1)
Array indices must be positive integers or logical values.

Inoltre, l'indice non deve eccedere i limiti del vettore:

>> v(9)
Index exceeds the number of array elements (7).

Il vettore di esempio che abbiamo usato era un vettore riga. Le modalità di accesso agli elementi valgono anche per un vettore colonna. Infatti, dal punto di vista dell'indicizzazione, vettori riga e colonna sono equivalenti in MATLAB. Vediamo un esempio:

>> v = [10;20;30;40;50;60;70]

v =

    10
    20
    30
    40
    50
    60
    70

>> v(4)

ans =

    40

Sotto-vettori

Negli esempi di sopra abbiamo acceduto ai singoli elementi di un vettore. In MATLAB è anche possibile accedere a sotto-vettori ossia sotto-insiemi di elementi del vettore.

Per poter accedere ad un sotto-vettore bisogna specificare, tra parentesi tonde, un vettore contenente gli indici degli elementi desiderati. Questo vettore prende il nome di vettore indice.

Ritornado al nostro esempio, supponiamo di voler accedere al secondo, quarto e sesto elemento di v. Per poterlo fare basta specificare, come vettore indice, il vettore [2 4 6] come nell'esempio che segue:

>> v = 0:5:30

v =

     0     5    10    15    20    25    30

>> v([2 4 6])

ans =

     5    15    25

Lo stesso risultato si può ottenere specificando il vettore indice anche con l'operatore di iterazione:

>> v(2:2:6)

ans =

     5    15    25

Il vettore indice può essere un vettore qualsiasi. Non vi è nessun vincolo da imporre sul vettore indice se non quello che i suoi elementi devono essere indici validi. Infatti, il vettore indice non deve essere per forza sequenziale e può anche contenere indici ripetuti. Vediamo un esempio:

>> v([5 5 6 1 1 2])

ans =

    20    20    25     0     0     5

Modificare gli elementi di un vettore

Attraverso gli indici è possibile anche modificare gli elementi di un vettore. Basta, infatti, specificare il vettore con l'indice dell'elemento da modificare a sinistra di un'espressione di assegnamento. Proviamo, ad esempio a modificare il terzo elemento del vettore v:

>> v = 0:5:30

v =

     0     5    10    15    20    25    30

>> v(3) = 19

v =

     0     5    19    15    20    25    30

Nell'esempio, il terzo elemento varrà ora 19 anziché 10.

Utilizzando i vettori indice è anche possibile modificare gli elementi di un vettore a gruppi. In questo caso, bisogna specificare a destra dell'uguale un vettore con i nuovi valori degli elementi da modificare. Inoltre, bisogna fare attenzione affinché il vettore con i nuovi elementi abbia un numero di elementi pari al numero degli indici del vettore indice. Proviamo, ad esempio, a modificare il secondo, terzo e quarto elemento del vettore v:

>> v = 0:5:30

v =

     0     5    10    15    20    25    30

>> v([2 3 4]) = [12 13 14]

v =

     0    12    13    14    20    25    30

In questo modo, con un'unica espressione abbiamo modificato tre elementi.

Aggiungere elementi ad un vettore

Quando modifichiamo un vettore possiamo anche aggiungere elementi. Basta specificare, infatti, come indice un indice che non esiste ancora. Tornando al nostro vettore v, che è composto da 7 elementi, se usiamo come indice 8 MATLAB provvederà automaticamente ad estendere il vettore con un ottavo elemento:

>> v = 0:5:30

v =

     0     5    10    15    20    25    30

>> v(8) = 35

v =

     0     5    10    15    20    25    30    35

Sorge a questo punto la domanda: se avessimo specificato come indice un valore diverso dal numero di elementi più uno cosa sarebbe accaduto?. La risposta è semplice. Se vi sono dei gap o buchi nell'indicizzazione, MATLAB, oltre ad aggiungere il nuovo elemento specificato nella posizione richiesta, riempie gli spazi con degli zeri. Per chiarire meglio, torniamo al nostro vettore v e specifichiamo come indice del nuovo elemento il numero 12 anziché 8:

>> v = 0:5:30

v =

     0     5    10    15    20    25    30

>> v(12) = 35

v =

     0     5    10    15    20    25    30     0     0     0     0    35

Come si vede dall'esempio, MATLAB ha aggiunto quattro zeri tra 30 e il nuovo elemento 35 e il vettore v adesso è di dodici elementi.

Da notare, tuttavia, che questa tecnica di estendere in una volta sola la dimensione di un vettore non è efficiente in quanto potrebbe richiedere del tempo ulteriore per l'allocazione dello spazio necessario. Più avanti vedremo delle tecniche più avanzate per modificare le dimensioni di un vettore.

Allo stesso modo, è possibile estendere un vettore usando un vettore indice. Proviamo, ad esempio, ad estendere il vettore v con tre elementi anziché uno solo:

>> v = 0:5:30

v =

     0     5    10    15    20    25    30

>> v([8 9 10]) = [35 40 50]

v =

     0     5    10    15    20    25    30    35    40    50

Utilizzare l'espressione end

Negli esempi di sopra, per indicizzare l'ultimo elemento di un vettore abbiamo sempre usato un intero. Questo però comporta il problema di dover ricordare in qualche modo quanti elementi un vettore abbia. Per questo motivo, MATLAB mette a disposizione la parola chiave end che rappresenta l'indice dell'ultimo elemento del vettore. Torniamo al vettore v degli esempi precedenti, volendo accedere all'ultimo elemento basta usare l'espressione v(end):

>> v = 0:5:30

v =

     0     5    10    15    20    25    30

>> v(end)

ans =

    30

In questo modo non è necessario ricordare quanti elementi abbia v. Possiamo sfruttare end anche per aggiungere nuovi elementi in questo modo:

>> v(end + 1) = 35

v =

     0     5    10    15    20    25    30    35

La parola chiave end può essere usata anche all'interno di un vettore indice. Ad esempio, se volessimo ottenere il primo e l'ultimo elemento potremmo scrivere così:

>> v([1 end])

ans =

     0    35

Riassumendo

In questa lezione abbiamo visto come indicizzare gli elementi utilizzando indici interi che, a differenza di altri linguaggi, partono da 1 anziché da 0. Abbiamo visto come usare i vettori indice per ottenere sotto-vettori. Inoltre, abbiamo visto come modificare ed estendere un vettore usando gli indici. Infine, abbiamo visto l'utilizzo della parola chiave end per accedere all'ultimo elemento di un vettore.

Nella prossima lezione vedremo come indicizzare, invece, gli elementi di una matrice.