lettura facile

Come fare una ricerca in un array su Octave

In questa guida ti spiego come ricercare e trovare la posizione di un dato in un array usando la funzione find() di Octave

find(X,N,D)

La funzione find() ha tre parametri:

  • X
    Il primo parametro X è un array dove fare la ricerca. E' un parametro obbligatorio.
  • N
    Il parametro N è il numero massimo di elementi che vuoi ottenere dalla ricerca. La ricerca si interrompe dopo N risultati.
  • D
    Il parametro D indica la direzione della ricerca. Puoi inserire "first" per fare una ricerca dal primo all'ultimo elemento dell'indice oppure "last" per farla dall'ultimo al primo elemento dell'indice. Di default è "first".

Questa funzione estrae dall'array gli indici degli elementi che soddisfano la ricerca.

Nota. La funzione find() restituisce gli indici degli array in ordine crescente. Non in ordine di estrazione.

Ti faccio un esempio pratico

Crea un array e assegnalo alla variabile V

>> V = [ 1 0 2 0 4 0 4 ]
V =
1 0 2 0 4 0 4

Nell'array ci sono sette elementi

Non dimenticare che l'indice degli elementi in un array comincia a partire da uno su Octave

indice degli elementi dell'array su Octave

Digita find(V) per trovare gli elementi diversi da zero.

>> find(V)
ans =
1 3 5 7

La funzione find() visualizza la posizione nell'indice degli elementi dell'array con valori non nulli ossia V[1], V[3], V[5] e V[7].

il risultato della ricerca

E' importante sottolineare che i risultati non sono i valori degli elementi ma le posizioni degli elementi nell'indice dell'array.

Nota. La funzione find() restituisce gli stessi risultati anche quando l'array è disposto in colonna.
la funzione find()

Digita find(V,1) per avere solo un risultato dalla ricerca.

>> find(V,1)
ans = 1

In questo caso la funzione restituisce la posizione del primo elemento non nullo che trova nell'array, ossia V[1]

il risultato della ricerca

Ora digita find(V,1,"last") per fare la ricerca da destra verso sinistra.

>> find(V,1,"last")
ans = 7

La ricerca restituisce l'elemento V[7] perché è il primo con valore non nullo V[7]=4 a partire da destra.

il risultato della ricerca

 

Se vuoi trovare gli elementi uguali a zero aggiungi una negazione davanti al nome dell'array.

Digita find(~V)

>> find(~V)
ans =
2 4 6

La ricerca estrae le posizioni nell'indice degli elementi con valore uguale a zero ossia V[2], V[4] e V[6].

 

il risultato della ricerca

Digita find(V>2) per trovare soltanto gli elementi dell'array con valore maggiore di due

>> find(V>2)
ans =
5 7

La funzione trova gli elementi V[5] e V[7] dell'array

il risultato della ricerca

Quando la ricerca non produce risultati, la funzione find() restituisce un insieme vuoto.

Ad esempio, se digiti find(V>5) il risultato è un array vuoto.

>> find(V>5)
ans = [ ](1x0)

Digita find(V<=3 & V>=1) per cercare gli elementi dell'array con valore tra 1 e 3,

>> find(V<=3 & V>=1)
ans =
1 3

La ricerca estrae gli elementi V[1] e V[3] dell'array

il risultato della ricerca

Come fare una ricerca in un array multidimensionale?

Quando l'array è multidimensionale (es. matrice) la funzione find esegue la ricerca colonna dopo colonna.

Ad esempio, crea una matrice con tre righe e tre colonne.

>> M=[1 0 1; 0 1 0; 1 0 1]
M =
1 0 1
0 1 0
1 0 1

La matrice è un array a due dimensioni

$$ \begin{pmatrix} 1 & 0 & 1 \\ 0 & 1 & 0 \\ 1 & 0 & 1 \end{pmatrix} $$

Digita find(M) per cercare gli elementi con valore diverso da zero

>> find(M)
ans =
1
3
5
7
9

La funzione restituisce le posizioni degli elementi nell'indice come se l'array fosse a una dimensione, scorrendo gli elementi in colonna.

Ad esempio, gli indici 1 e 3 sono i primi due elementi non nulli che si trovano sulla prima colonna.

i primi due elementi

L'indice 5 è l'elemento diverso da zero sulla seconda colonna. E' il quinto elemento analizzato dalla ricerca.

il quinto elemento della serie

Gli indici 7 e 9 sono gli elementi non nulli sulla terza colonna. Sono rispettivamente il settimo e il nono elemento nella sequenza degli elementi analizzati dalla ricerca.

gli elementi in posizione 7 e 9

Se vuoi ottenere come risultato le coordinate (riga;colonna) degli elementi nella matrice devi usare un altro comando.

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

In questo caso la funzione estrae tre array:

  • il primo array (row) contiene i numeri di riga
  • il secondo array (col) contiene i numeri di colonna
  • il terzo array (v) contiene i valori degli elementi

Ad esempio, per visualizzare le coordinate del primo risultato della ricerca digita row(1),col(1)

>> row(1),col(1)
ans = 1
ans = 1

Il primo elemento non nullo della matrice si trova alle coordinate (1,1) ossia sulla prima riga e prima colonna della matrice.

il primo elemento

Per visualizzare le coordinate del secondo risultato digita row(2),col(2)

>> row(2),col(2)
ans = 3
ans = 1

Il secondo elemento con valore non nullo si trova alle coordinate (3,1) ossia sulla terza riga e prima colonna della matrice.

il secondo elemento

In questo modo puoi ottenere la posizione esatta degli elementi sulla matrice.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin