Filtra gli elementi in un array NumPy

Vaibhav Vaibhav 22 giugno 2021
  1. Filtra gli elementi usando il metodo fromiter() in NumPy
  2. Filtra gli elementi utilizzando il metodo di suddivisione in maschera booleana in NumPy
  3. Filtra gli elementi usando il metodo where() in NumPy
Filtra gli elementi in un array NumPy

Spesso, abbiamo bisogno di valori da un array in uno specifico, di solito in ordine crescente o decrescente. A volte, dobbiamo anche cercare elementi da un array e recuperarli o filtrare alcuni valori in base ad alcune condizioni.

Questo articolo introdurrà come filtrare i valori da un array NumPy.

Filtra gli elementi usando il metodo fromiter() in NumPy

fromiter() crea un nuovo array unidimensionale da un oggetto iterabile che viene passato come argomento. Possiamo applicare condizioni agli elementi dell’array di input e fornire ulteriormente quel nuovo array a questa funzione per ottenere gli elementi desiderati in un array NumPy.

La sintassi del metodo fromiter() è di seguito.

fromiter(iterable, dtype, count, like)

Ha i seguenti parametri.

  • iterable - Un oggetto iterabile su cui la funzione itererà.
  • dtype - Questo parametro si riferisce al tipo di dati dell’array restituito.
  • count - Questo è un parametro intero opzionale e si riferisce al numero di elementi che verranno letti nell’oggetto iterabile. Il valore predefinito di questo parametro è -1, il che significa che verranno letti tutti gli elementi.
  • like - Questo è un parametro booleano opzionale. Controlla la definizione dell’array restituito.

Il modo per filtrare gli elementi usando il metodo fromiter() in NumPy è il seguente.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray = np.fromiter(
    (element for element in myArray if element < 6), dtype=myArray.dtype
)
print(myArray)
print(newArray)

Produzione:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]

Per prima cosa, inizializziamo un NumPy Array da cui vogliamo filtrare gli elementi. Quindi iteriamo sull’intero array e filtriamo i valori inferiori a 6. Quindi eseguiamo il cast di questo nuovo array in un array NumPy con lo stesso tipo di dati dell’array originale.

Per ulteriori informazioni su questo metodo, fare riferimento alla sua documentazione ufficiale

Filtra gli elementi utilizzando il metodo di suddivisione in maschera booleana in NumPy

Questo metodo è un po’ strano ma funziona come un fascino in NumPy. Dobbiamo menzionare la condizione all’interno delle parentesi quadre o quadrate [] dopo l’array. Quindi NumPy filtrerà gli elementi in base alla condizione e restituirà un nuovo array filtrato.

Questo concetto potrebbe non essere chiaro e persino sembrare complicato per alcuni, ma non preoccuparti. Abbiamo alcuni esempi di seguito per spiegarlo un po’ meglio.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[myArray < 6]  # Line 1
newArray2 = myArray[myArray % 2 == 0]  # Line 2
newArray3 = myArray[myArray % 2 != 0]  # Line 3
newArray4 = myArray[np.logical_and(myArray > 1, myArray < 5)]  # Line 4
newArray5 = myArray[np.logical_or(myArray % 2 == 0, myArray < 5)]  # Line 5
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)

Produzione:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[2 4 6 8]
[1 3 5 7 9]
[2 3 4]
[1 2 3 4 6 8]

Come accennato in precedenza, aggiungiamo alcune condizioni tra le parentesi quadre e l’array di destinazione è stato filtrato in base a tali condizioni. La variabile che memorizza l’array, che in questo caso è myArray, rappresenta un singolo elemento dell’array all’interno delle parentesi quadre.

Per applicare più condizioni e utilizzare operatori logici, usiamo due metodi NumPy, vale a dire, logic_and() e logical_or() rispettivamente per la logica and o or.

  • myArray < 6 - Filtra i valori inferiori a 6
  • myArray % 2 == 0 - Filtra i valori divisibili per 2
  • myArray % 2 != 0 - Filtra i valori che non sono divisibili per 2
  • np.logical_and(myArray > 1, myArray < 5) - Filtra i valori maggiori di uno e minori di cinque.
  • np.logical_or(myArray % 2 == 0, myArray < 5) - Filtra i valori che sono divisibili per due o inferiori a cinque.

Filtra gli elementi usando il metodo where() in NumPy

Ecco l’ultimo metodo, che usa il metodo where() dalla libreria NumPy. Filtra gli elementi dalla matrice di destinazione in base a una condizione e restituisce gli indici degli elementi filtrati.

È inoltre possibile utilizzare questo metodo per modificare i valori degli elementi che soddisfano la condizione.

La sintassi del metodo where() è mostrata di seguito.

where(condition, x, y)

Ha i seguenti parametri.

  • condition - È la condizione booleana per la quale viene controllato ogni elemento dell’array.
  • x - È un valore dato agli elementi che soddisfano la condizione o un calcolo effettuato sugli elementi soddisfacenti.
  • y - È un valore dato agli elementi che non soddisfano la condizione o un calcolo effettuato sugli elementi insoddisfacenti.

Vediamo come utilizzare questa funzione per filtrare gli elementi.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[np.where(myArray < 7)[0]]
newArray2 = myArray[np.where(myArray % 2 == 0)[0]]
newArray3 = myArray[np.where(myArray % 2 != 0)[0]]
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)

Produzione:

[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6]
[2 4 6 8]
[1 3 5 7 9]

Nello snippet precedente, tutti gli elementi che soddisfano la condizione sono stati restituiti come un array.

La funzione where() restituisce una tupla di array NumPy. Quindi consideriamo solo il primo array, che è la nostra risposta.

Come accennato in precedenza, puoi anche assegnare valori personalizzati ed eseguire azioni personalizzate sugli elementi quando soddisfano la condizione specificata e quando non lo sono.

Di seguito è riportato un esempio di ciò.

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = np.where(myArray < 7, 5, -1)
newArray2 = np.where(myArray % 2 == 0, myArray ** 2, 0)
newArray3 = np.where(myArray % 2 != 0, myArray, -1)
newArray4 = np.where(myArray % 2 != 0, myArray, myArray)
newArray5 = np.where(myArray % 2 != 0, 0, myArray)
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)

Produzione:

[1 2 3 4 5 6 7 8 9]
[ 5  5  5  5  5  5 -1 -1 -1]
[ 0  4  0 16  0 36  0 64  0]
[ 1 -1  3 -1  5 -1  7 -1  9]
[1 2 3 4 5 6 7 8 9]
[0 2 0 4 0 6 0 8 0]

Dai un’occhiata all’output. Guarda come cambiano gli elementi in base alle condizioni e in base ai valori e ai calcoli che hai fornito per manipolare gli elementi nella funzione where().

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.