Il filtraggio degli array in NumPy è una delle operazioni più utili quando si lavora con i dati in Python. Permette di selezionare solo gli elementi che rispettano una determinata condizione, rendendo più semplice l’analisi, la pulizia e la trasformazione delle informazioni. Se stai muovendo i primi passi con questa libreria, imparare a filtrare correttamente un array ti aiuterà a scrivere codice più chiaro, rapido ed efficace.
NumPy è apprezzato soprattutto per la sua velocità e per la capacità di gestire grandi quantità di dati numerici. In questo articolo vedremo come applicare il filtro su array NumPy con esempi pratici, partendo dai casi più semplici fino ad arrivare agli array multidimensionali. L’obiettivo è offrirti una guida concreta, leggibile e subito applicabile.
Come filtrare un array NumPy con gli operatori di confronto
Il metodo più diretto per eseguire un filtraggio in NumPy consiste nell’usare gli operatori di confronto, come >, <, ==, >= e <=. Questi operatori non restituiscono immediatamente i valori filtrati, ma generano un array di valori booleani, composto da True e False.
Vediamo un esempio semplice:
import numpy as np
numeri = np.array(
{
3, 7, 12, 18, 21
}
)
filtro = numeri > 10
print(filtro)
Il risultato sarà un array booleano che indica quali elementi sono maggiori di 10. In pratica, ogni posizione dell’array viene valutata singolarmente. Questo approccio è molto potente perché rappresenta la base della cosiddetta indicizzazione booleana.
Se vuoi ottenere direttamente i valori che soddisfano la condizione, puoi usare il filtro come maschera:
import numpy as np
numeri = np.array(
{
3, 7, 12, 18, 21
}
)
risultato = numeri[numeri > 10]
print(risultato)
In questo caso NumPy seleziona solo gli elementi per cui la condizione è vera. È un meccanismo elegante, leggibile e molto comune nei progetti reali. Quando si parla di selezionare elementi in un array NumPy, il più delle volte ci si riferisce proprio a questa tecnica.
Uso del filtraggio NumPy per selezionare valori tramite indicizzazione
Una volta compreso il funzionamento delle condizioni booleane, il passo successivo è capire come sfruttarle per l’indicizzazione degli array. In NumPy, infatti, puoi usare un array booleano della stessa lunghezza dell’array originale per estrarre solo i dati desiderati.
Ecco un esempio pratico:
import numpy as np
temperature = np.array(
{
15, 18, 22, 30, 12, 27
}
)
maschera = np.array(
{
True, False, True, False, True, False
}
)
valori_filtrati = temperature[maschera]
print(valori_filtrati)
Questo tipo di selezione è utile quando hai già definito in precedenza una regola o una maschera personalizzata. Tuttavia, nella pratica quotidiana, molto spesso la maschera viene costruita direttamente partendo dai dati stessi.
Per esempio, se vuoi isolare le temperature superiori a 20 gradi, puoi scrivere:
import numpy as np
temperature = np.array(
{
15, 18, 22, 30, 12, 27
}
)
alte = temperature[temperature > 20]
print(alte)
Questa modalità è particolarmente apprezzata perché riduce il codice superfluo e migliora la leggibilità. In un contesto di analisi dati, sapere come filtrare valori specifici in NumPy consente di concentrarsi solo sulle informazioni davvero rilevanti.
Come combinare più condizioni nel filtraggio degli array NumPy
Molto spesso una sola condizione non basta. Potresti avere bisogno di estrarre valori compresi in un intervallo, oppure elementi che rispettano più criteri contemporaneamente. In questi casi, NumPy consente di combinare condizioni usando operatori logici come & per “e” e | per “oppure”.
È importante ricordare che ogni condizione va racchiusa tra parentesi. Questo dettaglio, apparentemente piccolo, evita errori sintattici e rende il codice più ordinato.
Per filtrare i numeri maggiori di 10 e minori di 20:
import numpy as np
numeri = np.array(
{
5, 11, 14, 19, 25, 8
}
)
risultato = numeri[(numeri > 10) & (numeri < 20)]
print(risultato)
Se invece vuoi selezionare i valori minori di 10 oppure maggiori di 20:
import numpy as np
numeri = np.array(
{
5, 11, 14, 19, 25, 8
}
)
risultato = numeri[(numeri < 10) | (numeri > 20)]
print(risultato)
Questa logica è centrale quando si lavora su dataset reali, dove le informazioni raramente si lasciano classificare con una sola regola. Saper gestire bene il filtraggio condizionale in NumPy significa rendere il proprio codice più preciso e adattabile.
Esiste anche l’operatore di negazione, utile quando vuoi escludere una condizione:
import numpy as np
numeri = np.array(
{
5, 11, 14, 19, 25, 8
}
)
risultato = numeri[~(numeri > 10)]
print(risultato)
Il simbolo ~ inverte i valori booleani, trasformando i True in False e viceversa. È una soluzione pratica quando vuoi ottenere rapidamente il complemento di un filtro già definito.
Filtrare array multidimensionali in NumPy in modo semplice
Il filtraggio diventa ancora più interessante quando si passa agli array multidimensionali. Anche in questo scenario, NumPy mantiene una sintassi coerente e intuitiva, ma è utile capire bene come si comporta la selezione dei dati.
Consideriamo una matrice bidimensionale:
import numpy as np
matrice = np.array(
[
[1, 5, 9],
[12, 15, 3],
[7, 20, 25]
]
)
risultato = matrice[matrice > 10]
print(risultato)
In questo caso NumPy restituisce tutti gli elementi maggiori di 10 in un array monodimensionale. Questo comportamento sorprende spesso chi è agli inizi, ma è perfettamente normale: il filtro booleano applicato direttamente alla matrice estrae tutti i valori che rispettano la condizione, senza mantenere la struttura originale.
Se invece vuoi filtrare righe o colonne in base a una regola, il ragionamento cambia leggermente. Ad esempio, puoi selezionare le righe in cui il primo elemento è maggiore di 5:
import numpy as np
matrice = np.array(
[
[1, 5, 9],
[12, 15, 3],
[7, 20, 25]
]
)
righe_filtrate = matrice[matrice[:, 0] > 5]
print(righe_filtrate)
Qui stiamo usando la notazione : per indicare tutte le righe e 0 per riferirci alla prima colonna. In seguito, il filtro viene applicato per decidere quali righe conservare. È una tecnica molto utile quando lavori con tabelle numeriche, coordinate, punteggi o matrici di dati.
Puoi anche filtrare le colonne, se necessario, costruendo una condizione sulla dimensione corretta. Sebbene all’inizio possa sembrare meno immediato, dopo qualche esercizio il meccanismo diventa naturale. Ed è proprio qui che NumPy mostra una delle sue qualità migliori: con poche istruzioni è possibile ottenere selezioni molto sofisticate.