HOWTO · NumPy

NumPy Sostituisci valori

Esistono tre metodi principali che possono essere utilizzati per sostituire i valori all'interno di un array NumPy in Python, la funzione numpy.clip(), la funzione numpy.minimum() e il metodo di indicizzazione.

In questa pagina

Per sostituire i valori in un array NumPy, usa numpy.clip() oppure combina numpy.minimum() e numpy.maximum() per limitare i valori tra due estremi. Per una condizione come «sostituire ogni valore maggiore di 5», usa l’indicizzazione booleana e l’assegnazione. I primi due approcci creano un array risultato e lasciano invariato l’input; l’assegnazione tramite indice modifica l’array originale.

Sostituire i valori in NumPy con la funzione numpy.clip()

Usa numpy.clip() quando vuoi mantenere ogni valore entro un limite inferiore e uno superiore. I valori inferiori al limite minimo vengono portati a quel limite, mentre quelli superiori al limite massimo vengono portati al limite massimo. Se non specifichi l’argomento out, la funzione restituisce un array con i valori limitati e lascia invariato l’array di input. Ecco un esempio:

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

import numpy as np

array = np.array([1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 9, 9])

result = np.clip(array, 0, 5)
print(result)

Risultato:

[1 2 3 4 5 5 5 5 5 5 5 5]

In questo caso, 0 è il limite inferiore e 5 quello superiore. I valori già compresi tra questi limiti restano invariati, mentre quelli maggiori vengono limitati a 5. Assegnando il valore restituito a result, l’array originale array resta disponibile per i calcoli successivi.

Sostituire i valori in NumPy con le funzioni numpy.minimum() e numpy.maximum()

Puoi applicare gli stessi due limiti con numpy.minimum() e numpy.maximum(). Per prima cosa, numpy.minimum() imposta il limite superiore scegliendo il valore minore tra ciascun elemento dell’array e 5. Poi numpy.maximum() imposta il limite inferiore scegliendo il valore maggiore tra ciascun valore intermedio e 0. Entrambe le operazioni restituiscono array, quindi anche questa sequenza lascia invariato array.

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

import numpy as np

array = np.array([1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 9, 9])

result1 = np.minimum(array, 5)

result2 = np.maximum(result1, 0)
print(result2)

Risultato:

[1 2 3 4 5 5 5 5 5 5 5 5]

L’ordine è importante quando applichi entrambi i limiti: prima riduci i valori troppo alti al limite superiore, poi aumenti quelli inferiori al limite minimo. Sostituisci 5 e 0 con i limiti superiore e inferiore che ti servono. Se ti serve un solo limite, usa la funzione corrispondente da sola: numpy.minimum() per un limite superiore oppure numpy.maximum() per un limite inferiore.

Sostituire i valori in NumPy con l’indicizzazione dell’array in Python

Per sostituire i valori in base a una condizione, seleziona gli elementi corrispondenti con una maschera booleana e assegna il nuovo valore tramite quella selezione. È utile quando la regola non consiste semplicemente in due limiti, per esempio per modificare i valori sopra una soglia. L’assegnazione agisce sull’array originale, quindi creane una copia prima se vuoi conservarlo invariato.

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

import numpy as np

array = np.array([1, 2, 3, 4, 5, 5, 6, 7, 8, 8, 9, 9])

array[array > 5] = 5
print(array)

Risultato:

[1 2 3 4 5 5 5 5 5 5 5 5]

L’espressione array > 5 crea una maschera booleana, vera per ogni valore maggiore di 5. L’indicizzazione con quella maschera seleziona tali elementi e l’assegnazione di 5 li sostituisce direttamente nell’array. Per sostituire i valori inferiori a una soglia, cambia il confronto in <; per selezionare un intervallo o applicare un’altra condizione, combina confronti booleani con & oppure | e racchiudi ciascun confronto tra parentesi.