
Come cercare un valore in un array
In questa guida ti spiego come cercare un valore in un array di Matlab tramite la funzione find()
find(X,N,D)
La funzione ha tre parametri:
- X
Il parametro X è un array. E' il parametro obbligatorio. - N
Il parametro N è un numero intero che indica il massimo numero di elementi da trovare. Quando viene raggiunto la ricerca viene interrotta. - D
Il parametro D è la direzione della ricerca. Può essere "first" per avviare la ricerca dal primo elemento dell'indice oppure "last" per avviarla dall'ultimo elemento.
La funzione restituisce gli indici degli elementi dell'array che soddisfano la ricerca.
Nota. Gli indici degli array sono sempre ordinati in ordine ascendente. Anche quando la ricerca parte dall'ultimo elemento.
Ti faccio un esempio pratico
Crea un array a una dimensione
>> V = [ 1 0 2 0 4 0 4 ]
V =
1 0 2 0 4 0 4
In questo array ci sono sette elementi
In Matlab l'indice degli elementi in un array comincia da uno

Digita find(V) per trovare gli elementi non nulli.
>> find(V)
ans =
1 3 5 7
La funzione restituisce le posizioni in cui si trovano gli elementi dell'array diversi da zero ossia V[1], V[3], V[5] e V[7].

Nota. Lo stesso accade anche se l'array è disposto in righe anziché in colonne. La funzione find() restituisce le posizioni sull'indice.

Per trovare solo il primo elemento che soddisfa la condizione inserisci 1 nel secondo parametro.
Digita find(V,1)
>> find(V,1)
ans = 1
La funzione restituisce l'indice del primo elemento non nullo dell'array, ossia V[1]

Per cercare gli elementi a partire dall'ultimo indica "last" come terzo parametro.
Digita find(V,1,"last")
>> find(V,1,"last")
ans = 7
In questo caso la direzione della ricerca va da destra verso sinistra.
Il primo elemento che soddisfa la condizione è V[7]

Per cercare gli elementi uguali a zero inserisci una negazione davanti al nome dell'array.
Digita find(~V)
>> find(~V)
ans =
2 4 6
La funzione restituisce le posizioni in cui si trovano gli elementi dell'array uguali a zero ossia V[2], V[4] e V[6].

Per individuare solo gli elementi dell'array maggiori di due, digita find(V>2)
>> find(V>2)
ans =
5 7
La funzione restituisce in output gli elementi V[5] e V[7] dell'array

Se la ricerca non seleziona nemmeno un elemento dell'array, il risultato è un insieme vuoto.
Ad esempio, digita find(V>5) per cercare gli elementi maggiori di 5.
Il risultato è un array vuoto perché il valore più grande nell'array è 4.
>> find(V>5)
ans =
1×0 empty double row vector
Per cercare gli elementi dell'array con valore compreso tra 1 e 3, digita find(V<=3 & V>=1)
>> find(V<=3 & V>=1)
ans =
1 3
Gli elementi che soddisfano la condizione sono V[1] e V[3]

E se l'array è multidimensionale?
Quando l'array è multidimensionale (es. matrice) la funzione find effettua la ricerca sulla prima colonna, poi sulla seconda, e via dicendo
Ad esempio, crea una matrice 3x3
>> M=[1 0 1; 0 1 0; 1 0 1]
M =
1 0 1
0 1 0
1 0 1
Si tratta di un array a due dimensioni con tre righe e tre colonne
$$ \begin{pmatrix} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 1 \end{pmatrix} $$
Digita find(M) per trovare gli elementi non nulli
>> find(M)
ans =
1
3
5
7
9
Gli indici 1 e 3 sono i primi due elementi non nulli sulla prima colonna.

L'indice 5 è l'elemento non nullo sulla seconda colonna. E' il quinto elemento della successione.

Gli indici 7 e 9 sono gli elementi non nulli sulla terza colonna. Sono il settimo e il nono elemento della successione.

In pratica la funzione find() restituisce la posizione degli elementi nella matrice come se fossero in un'unico vettore.
Per avere la posizione sulla matrice con le coordinate (riga;colonna) digita [row,col,v]=find(M)
>> [row,col]=find(M)
row =
1
3
2
1
3
col =
1
1
2
3
3
v =
1
1
1
1
1
La funzione estrae tre array row e col che contengono le coordinate (riga;colonna) degli elementi. Un altro array v contiene i valori.
Per vedere le coordinate del primo elemento della selezione digita row(1),col(1)
>> row(1),col(1)
ans = 1
ans = 1
Il primo elemento si trova alle coordinate (1,1) sulla prima riga, prima colonna.

Per vedere le coordinate del secondo elemento selezionato digita row(2),col(2)
>> row(2),col(2)
ans = 3
ans = 1
Il secondo elemento si trova alle coordinate (3,1) sulla terza riga, prima colonna.

In questo modo puoi risalire alla posizione degli elementi sulla matrice.

