API · NumPy

Funzione Python Numpy.where()

La funzione numpy where() controlla gli elementi in un array di input e genera l'output secondo la condizione specificata.

In questa pagina

numpy.where() ha due forme con risultati diversi. Chiamata come numpy.where(condition), restituisce array di indici per le posizioni in cui la condizione è vera. Chiamata come numpy.where(condition, x, y), sceglie i valori da x o y elemento per elemento. Usa la prima forma per trovare le corrispondenze e la seconda per creare un array in base a una condizione.

Risultati di numpy.where(): restituisce indici oppure seleziona valori

Scegli la forma con la sola condizione quando ti servono le posizioni, per esempio indici da esaminare o da usare in un’altra operazione. Scegli la forma con tre argomenti quando ti serve un risultato i cui valori dipendono da un test. La condizione determina quale ramo fornisce ciascun elemento del risultato: se è vera, seleziona da x; se è falsa, seleziona da y.

Sintassi e parametri di numpy.where()

Le firme di chiamata sono numpy.where(condition) e numpy.where(condition, x, y). L’argomento condition è un valore simile a un array, i cui valori di verità determinano il risultato. Nella forma con tre argomenti, x fornisce i valori per le posizioni vere e y quelli per le posizioni false. Passa x e y insieme: non possono essere forniti separatamente. Omettili entrambi quando vuoi ottenere gli indici.

Per i dettagli, consulta la documentazione NumPy 1.18 di numpy.where(). Questo articolo si concentra sulle due forme di chiamata e sugli esempi seguenti; non tratta tutte le possibili combinazioni di forme degli array.

Ottenere gli indici corrispondenti con numpy.where(condition)

Con una condizione unidimensionale, il risultato è una tupla con un solo elemento, che contiene un array di interi. Questi interi indicano le posizioni nell’input, non i valori presenti in quelle posizioni. Usa direttamente la tupla per indicizzare l’array originale; usa il suo primo elemento se ti serve specificamente l’array degli indici.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

values = np.array([4, 9, 12, 7, 15])
matching_positions = np.where(values > 10)
print(matching_positions)

Questa condizione è vera nelle posizioni 2 e 4, contando gli indici da zero come in Python. L’array di indici restituito indica quindi dove si trovano i valori corrispondenti; non contiene esso stesso 12 e 15.

Selezionare valori con numpy.where(condition, x, y)

La forma con tre argomenti restituisce valori selezionati, non posizioni. In ogni posizione, se la condizione è vera viene scelto il valore corrispondente da x; se è falsa, viene scelto quello da y. Per esempio, questa forma è utile per sostituire i valori che non superano una soglia e mantenere quelli che la superano.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

scores = np.array([42, 81, 67, 95])
labels = np.where(scores >= 70, "pass", "review")
print(labels)

Qui ogni punteggio viene confrontato con 70. Il risultato contiene "pass" per i punteggi pari o superiori alla soglia e "review" per gli altri. Come richiesto da questa forma di chiamata, vengono forniti entrambi i valori alternativi.

Usare numpy.where() con array multidimensionali

La stessa regola di selezione si applica posizione per posizione a una condizione bidimensionale. Ogni posizione del risultato viene selezionata dalla posizione corrispondente in x o y. Questo rende la forma con tre argomenti utile per trasformare una matrice mantenendone la disposizione di righe e colonne.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

values = np.array([[10, 25, 30], [18, 50, 5]])
replacement = np.full(values.shape, -1)
selected = np.where(values > 20, values, replacement)
print(selected)

La condizione verifica ogni elemento. I valori maggiori di 20 restano nel risultato; nelle altre posizioni viene inserito il valore -1 corrispondente da replacement. Il risultato mantiene la disposizione bidimensionale dell’input.

Combinare condizioni con numpy.where()

Per combinare confronti elemento per elemento, racchiudi ciascun confronto tra parentesi e uniscili con & per indicare che entrambe le condizioni devono essere vere, oppure con | per indicare che deve essere vera almeno una delle due. Questi operatori funzionano con condizioni sotto forma di array. Gli operatori scalari and e or di Python non sostituiscono gli operatori per combinare confronti elemento per elemento sugli array.

Esegui questo esempio:

Il codice e le etichette o gli output visibili in questa sezione restano in inglese.

import numpy as np

values = np.array([1, 2, 3, 4, 5])
in_range = (values > 1) & (values < 5)
selected = np.where(in_range, values, 0)
print(selected)

La condizione combinata è vera per 2, 3 e 4, quindi questi valori vengono mantenuti; alle posizioni esterne a quell’intervallo viene assegnato 0. Per verificare una condizione o l’altra, usa | tra confronti racchiusi tra parentesi, per esempio (values < 2) | (values > 4). Ogni confronto crea un array di valori di verità e numpy.where() applica poi il ramo selezionato in ciascuna posizione.