Filtrare Array in NumPy

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.

Corsi correlati

Design Pattern per videogiochi

I Design Pattern sono soluzioni a problemi comuni che si incontrano nello sviluppo del software. Nel contesto dei videogiochi, questi pattern possono aiutare a gestire la complessità crescente dei giochi moderni. Sei appassionato di videogiochi? Hai mai pensato a come vengono progettati e sviluppati? Sei curioso di scoprire i segreti dietro la creazione dei tuoi giochi preferiti? Allora sei nel posto giusto! Questo corso è stato progettato per fornirti una solida comprensione dei Design Pattern, strumenti fondamentali per ogni sviluppatore di giochi. Attraverso esempi pratici e realistici, esploreremo insieme come questi pattern possono aiutarti a creare giochi più efficienti, flessibili e mantenibili.

Corso Fondamenti di Python

Python, uno dei linguaggi di programmazione più popolari al mondo, è ampiamente utilizzato da colossi dell’informatica e della tecnologia come Google, la Nasa e Mozilla.
Questo corso sui fondamenti di Python esplorerà le ragioni del suo successo duraturo. Impareremo la potente ed espressiva sintassi di Python, che consente di ottenere risultati impressionanti con poche righe di codice.

Blender Masterclass 2

I paesaggi, in generale, possono risultare intimidatori data la loro complessità, costituita da numerosi elementi che sembrano formare qualcosa di virtualmente infinito. Durante le lezioni di questo corso, ci concentreremo su una scomposizione delle diverse fasi coinvolte nella creazione di una scena, affrontandole una alla volta attraverso passi graduati.

Blender Masterclass 1

In questo corso di Blender 3D, Masha, in collaborazione con Gedemy, vi mostrerà il processo di modellazione, UV mapping, shading, e texture painting di un asset. Una volta apprese le basi, vedremo anche come effettuare il baking delle textures e la preparazione con successivo export della mesh in modo che possa essere utilizzabile all’interno di un qualsiasi altro software.

Crea il tuo account gratuito Gedemy

Gedemy è la prima piattaforma di formazione italiana che ti permette di sviluppare competenze in ambiti come Game Design, Programming, Arte, 3D, Tech, AI e molto altro.