Logaritmi Ufunc NumPy

I logaritmi Ufunc di NumPy sono strumenti molto utili quando si lavora con numeri, array e calcoli scientifici in Python. Se stai iniziando a usare questa libreria, conoscere funzioni come np.log() e np.log10() ti aiuta a gestire trasformazioni matematiche comuni in modo rapido, pulito ed efficiente.

In NumPy, i logaritmi fanno parte delle cosiddette ufunc, cioè funzioni universali progettate per operare direttamente su array e valori numerici. Questo significa che non devi eseguire cicli manuali elemento per elemento: basta passare un array alla funzione e NumPy applicherà il calcolo a tutti i valori. È proprio qui che NumPy mostra la sua praticità.

In questa guida vedremo come usare il logaritmo naturale, il logaritmo in base 10, altre varianti disponibili e il comportamento dei logaritmi quando vengono applicati a un array NumPy. L’obiettivo è offrirti una spiegazione chiara, concreta e facilmente riutilizzabile nei tuoi progetti.

Come usare il logaritmo naturale con NumPy: np.log()

La funzione np.log() serve per calcolare il logaritmo naturale, cioè il logaritmo in base e. È una delle operazioni più frequenti in ambito matematico, statistico e nel preprocessing dei dati.

Se passi un numero singolo, NumPy restituisce il logaritmo naturale di quel valore.

import numpy as np

valore = np.log(10)
print(valore)

Quando esegui questo codice, ottieni il logaritmo naturale di 10. In molti casi, però, la vera utilità emerge quando lavori con più valori contemporaneamente.

import numpy as np

valori = np.array([1, 2, 5, 10])
risultato = np.log(valori)

print(risultato)

NumPy applica il calcolo a ogni elemento dell’array in modo automatico. Questo approccio è molto più elegante e veloce rispetto all’uso di un ciclo for tradizionale.

È importante ricordare un aspetto pratico: il logaritmo è definito solo per valori maggiori di zero. Se provi a usare

np.log(0)

oppure un numero negativo, NumPy restituirà un risultato speciale come -inf o nan, accompagnato spesso da un warning.

import numpy as np

print(np.log(0))
print(np.log(-5))

Per chi è alle prime armi, questo è un dettaglio da tenere bene a mente: prima di applicare un logaritmo ai dati, conviene verificare che non ci siano zeri o valori negativi.

Calcolare il logaritmo in base 10 con NumPy: np.log10()

La funzione np.log10() calcola il logaritmo in base 10. È molto usata quando si lavora con scale decimali, ordini di grandezza, misurazioni scientifiche e rappresentazioni numeriche più intuitive.

Il comportamento è simile a quello di np.log(), ma cambia la base del logaritmo.

import numpy as np

valore = np.log10(1000)
print(valore)

In questo caso il risultato è 3, perché 10 elevato alla terza dà 1000.

Naturalmente, anche np.log10() può essere usato con un array NumPy.

import numpy as np

valori = np.array([1, 10, 100, 1000])
risultato = np.log10(valori)

print(risultato)

Questo tipo di trasformazione è molto comune nell’analisi dei dati, soprattutto quando i valori coprono intervalli molto ampi. Applicare il logaritmo in base 10 può rendere i dati più leggibili e più semplici da confrontare.

Anche qui vale la stessa regola fondamentale: la funzione lavora correttamente solo con numeri positivi.

Altre funzioni logaritmiche di NumPy da conoscere

Oltre a np.log() e np.log10(), NumPy mette a disposizione altre funzioni logaritmiche che possono tornare molto utili in casi specifici.

Il logaritmo in base 2 con np.log2()

La funzione np.log2() calcola il logaritmo in base 2. È particolarmente interessante in informatica, teoria dell’informazione e algoritmi.

import numpy as np

valori = np.array([1, 2, 4, 8, 16])
risultato = np.log2(valori)

print(risultato)

Questo esempio restituisce valori come 0, 1, 2, 3 e 4, perché ogni numero è una potenza di 2.

Il logaritmo naturale di 1 più x con np.log1p()

Un’altra funzione meno nota ma molto utile è np.log1p(), che calcola il logaritmo naturale di 1 + x. Può sembrare un dettaglio, ma nella pratica è preziosa quando x è molto piccolo, perché offre una migliore stabilità numerica rispetto a un’espressione scritta manualmente.

import numpy as np

x = np.array([0, 0.1, 0.5, 1])
risultato = np.log1p(x)

print(risultato)

In contesti reali, questa funzione viene usata spesso in machine learning, statistica e analisi numerica.

Come ottenere logaritmi con basi diverse

NumPy non offre una funzione dedicata per ogni base possibile, ma puoi calcolare facilmente un logaritmo in una base qualsiasi sfruttando una formula semplice. Per esempio, il logaritmo in base 3 di un numero si può ottenere dividendo il logaritmo naturale del numero per il logaritmo naturale della base.

import numpy as np

valore = 81
base = 3
risultato = np.log(valore) / np.log(base)

print(risultato)

Questo approccio è pratico, chiaro e perfettamente adatto quando hai bisogno di una base non standard.

Applicare i logaritmi agli array NumPy in modo efficace

Uno dei motivi principali per cui i logaritmi Ufunc NumPy sono così apprezzati è la loro capacità di lavorare direttamente con gli array. Questa caratteristica rende NumPy una scelta eccellente per chi manipola grandi quantità di dati numerici.

Vediamo un esempio concreto con un array monodimensionale.

import numpy as np

dati = np.array([1, 10, 100, 1000, 10000])
log_dati = np.log10(dati)

print(log_dati)

Con una sola istruzione ottieni la trasformazione di tutti i valori. Lo stesso vale anche per array multidimensionali.

import numpy as np

matrice = np.array([[1, 10], [100, 1000]])
risultato = np.log10(matrice)

print(risultato)

La funzione viene applicata a ogni elemento della matrice senza cambiare la struttura dell’array. Questo comportamento è estremamente comodo quando lavori con dataset tabellari o matrici numeriche.

Se nel tuo array sono presenti valori non validi per il logaritmo, può essere utile filtrare i dati prima del calcolo.

import numpy as np

dati = np.array([0, 1, 10, -5, 100])
maschera = dati > 0
risultato = np.log(dati[maschera])

print(risultato)

Questo piccolo controllo evita warning inutili e ti consente di lavorare in modo più ordinato. Nella pratica, è una buona abitudine soprattutto quando i dati arrivano da file esterni, input utente o sorgenti non perfettamente pulite.

Un altro aspetto interessante è che le ufunc di NumPy sono pensate per essere veloci e ben integrate con l’intero ecosistema scientifico Python. Se usi i logaritmi in pipeline di analisi o trasformazione dati, noterai presto quanto sia vantaggioso affidarsi a queste funzioni invece di soluzioni manuali.

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.