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
-
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 danumpy.absolute().numpy.absolute()accetta inoltre input di tipo array, come gli elenchi, e parametri ufunc comeout=;abs()solleva unTypeErrorsu un semplice elenco perché gli elenchi non definiscono__abs__(). -
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 di3 + 4je-5 + 12jsono5.0e13.0, come mostrato nell’esempio dinumpy.absolute()qui sopra. -
Ci sono differenze di prestazioni tra questi metodi?
Nessuna significativa.numpy.abs()enumpy.absolute()sono lo stesso oggetto funzione, eabs()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. -
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. Preferiscinumpy.absolute()onumpy.abs()se l’input potrebbe essere un elenco o un altro oggetto di tipo array, poiché la funzione integrataabs()accetta solo oggetti che definiscono__abs__(). -
C’è qualche differenza nell’output quando si usano queste funzioni?
No. A parità di input, tutti e tre i metodi restituiscono gli stessi valori.