HOWTO · NumPy

Calcola il valore assoluto in NumPy

Esistono 3 metodi che possono essere utilizzati per calcolare il valore assoluto in NumPy, la funzione abs(), la funzione numpy.absolute() e la funzione numpy.abs() .

In questa pagina

Il calcolo dei valori assoluti è un’operazione fondamentale nell’analisi dei dati e nel calcolo scientifico. In Python, la libreria NumPy offre modi efficienti per eseguire questa operazione su array e dati numerici. Che tu abbia a che fare con un semplice elenco di numeri o con complessi array multidimensionali, capire come calcolare i valori assoluti può migliorare le tue capacità di manipolazione dei dati.

In questo articolo esploreremo tre metodi principali per calcolare i valori assoluti in NumPy: la funzione abs(), numpy.absolute() e numpy.abs(). I tre sono strettamente correlati - su un array NumPy eseguono tutti la stessa operazione elemento per elemento - quindi questa guida si concentra su ciò in cui differiscono davvero: quali input accetta ciascuno e quali controlli aggiuntivi offrono le funzioni NumPy.

Usare la funzione integrata abs()

La funzione abs() è una funzione integrata di Python che restituisce il valore assoluto di un numero. Pur non essendo specifica di NumPy, funziona con gli array NumPy: quando applichi abs() a un array, Python chiama il metodo __abs__() dell’array, che è la stessa operazione di valore assoluto di NumPy, e ottieni un nuovo array contenente i valori assoluti degli elementi originali.

Ecco come puoi usare la funzione abs() con NumPy:

import numpy as np

array = np.array([-1, -2, 3, -4])
absolute_values = abs(array)

print(absolute_values)

Produzione:

[1 2 3 4]

Poiché abs() si limita a inoltrare la chiamata al metodo __abs__() dell’array, su un array esegue esattamente lo stesso calcolo di numpy.absolute() - usare la funzione integrata sui dati NumPy non comporta alcuna penalità in termini di prestazioni. Il suo vero limite è un altro: abs() ha bisogno di un oggetto che definisca __abs__(). Funziona con i numeri di Python, i numeri complessi e gli array NumPy, ma chiamare abs() su un semplice elenco Python solleva un TypeError, mentre le funzioni NumPy qui sotto accettano gli elenchi direttamente.

Usare numpy.absolute()

numpy.absolute() è la funzione di valore assoluto propria di NumPy, implementata come ufunc. Calcola il valore assoluto elemento per elemento su array di qualsiasi forma e dimensione e, a differenza della funzione integrata, accetta anche input di tipo array, come un semplice elenco, convertendoli prima in un array. Come ufunc accetta anche i consueti parametri ufunc, ad esempio out= per scrivere il risultato in un array esistente.

Ecco un esempio di come usare numpy.absolute():

import numpy as np

array = np.array([[-1, -2, 3], [-4, 5, -6]])
absolute_values = np.absolute(array)

print(absolute_values)

Produzione:

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

numpy.absolute() supporta anche i numeri complessi, restituendo il modulo di ciascun elemento:

import numpy as np

complex_array = np.array([3 + 4j, -5 + 12j])
magnitudes = np.absolute(complex_array)

print(magnitudes)

Produzione:

[ 5. 13.]

Questo la rende una scelta predefinita sicura per i calcoli scientifici, dove i dati possono essere multidimensionali o complessi.

Usare numpy.abs()

numpy.abs() non è affatto un’implementazione separata: è esattamente lo stesso oggetto funzione di numpy.absolute() - in NumPy, np.abs is np.absolute restituisce True. Il nome più breve esiste solo come comodo alias.

Ecco come usare numpy.abs():

import numpy as np

array = np.array([[1, -2], [-3, 4]])
absolute_values = np.abs(array)

print(absolute_values)

Produzione:

[[1 2]
 [3 4]]

Poiché i due nomi indicano un’unica funzione, la scelta tra numpy.abs() e numpy.absolute() è solo una questione di stile o leggibilità nel tuo codice; risultati e prestazioni sono identici in entrambi i casi.

Conclusione

Calcolare i valori assoluti in NumPy è semplice perché tutti e tre i metodi eseguono la stessa operazione elemento per elemento sugli array. Usa la funzione integrata abs() quando i tuoi valori sono già array NumPy o semplici numeri e desideri un codice Python generico; rivolgiti a numpy.absolute() o al suo alias numpy.abs() quando devi passare dati di tipo array, come gli elenchi, oppure opzioni ufunc come out=. Qualunque forma tu scelga, i numeri che otterrai saranno gli stessi.

Domande frequenti

  1. Qual è la differenza tra abs() e numpy.absolute()?
    L’interfaccia, non il calcolo. Su un array NumPy, abs() chiama il metodo __abs__() dell’array, che è la stessa operazione eseguita da numpy.absolute(). numpy.absolute() accetta inoltre input di tipo array, come gli elenchi, e parametri ufunc come out=; abs() solleva un TypeError su un semplice elenco perché gli elenchi non definiscono __abs__().

  2. Posso usare numpy.abs() con i numeri complessi?
    Sì. Tutti e tre i metodi restituiscono il modulo di un numero complesso; ad esempio, i valori assoluti di 3 + 4j e -5 + 12j sono 5.0 e 13.0, come mostrato nell’esempio di numpy.absolute() qui sopra.

  3. Ci sono differenze di prestazioni tra questi metodi?
    Nessuna significativa. numpy.abs() e numpy.absolute() sono lo stesso oggetto funzione, e abs() su un array viene inoltrato alla stessa operazione NumPy, quindi tutti e tre svolgono lo stesso lavoro elemento per elemento; differisce solo l’overhead della chiamata, in misura trascurabile.

  4. Quale metodo dovrei usare per gli array multidimensionali?
    Uno qualsiasi - tutti e tre gestiscono array di qualsiasi forma, come mostrano gli esempi bidimensionali qui sopra. Preferisci numpy.absolute() o numpy.abs() se l’input potrebbe essere un elenco o un altro oggetto di tipo array, poiché la funzione integrata abs() accetta solo oggetti che definiscono __abs__().

  5. C’è qualche differenza nell’output quando si usano queste funzioni?
    No. A parità di input, tutti e tre i metodi restituiscono gli stessi valori.