Quando si lavora con gli array in Python, prima o poi si presenta un’esigenza molto comune: arrotondare i numeri in modo rapido, ordinato e coerente. In questo contesto, NumPy mette a disposizione diverse ufunc, cioè funzioni universali progettate per operare in maniera efficiente su array e matrici.
L’arrotondamento in NumPy è particolarmente utile nell’analisi dei dati, nel calcolo scientifico, nella visualizzazione di risultati numerici e nella pulizia dell’output. Anche chi è alle prime armi può iniziare subito a usare queste funzioni, perché la sintassi è piuttosto lineare e il comportamento è prevedibile nella maggior parte dei casi.
In questa guida vedremo quali sono le principali funzioni di arrotondamento NumPy, come indicare il numero di decimali e alcuni esempi pratici che aiutano a capire quando usare una funzione invece di un’altra.
Le principali funzioni di arrotondamento in NumPy
NumPy offre più di una funzione per arrotondare i valori. Questo è importante, perché non esiste un solo tipo di arrotondamento: in alcuni casi serve il valore intero più vicino, in altri si vuole sempre salire o sempre scendere.
La funzione più conosciuta è numpy.round(), chiamata spesso anche np.round(). Serve per arrotondare ogni elemento di un array al numero di cifre desiderato.
import numpy as np
valori = np.array([1.234, 5.678, 9.876])
risultato = np.round(valori)
print(risultato)
In questo caso, ogni numero viene arrotondato all’intero più vicino. Il risultato sarà un nuovo array con i valori arrotondati.
Accanto a np.round(), ci sono anche altre funzioni molto utilizzate:
- np.floor(): arrotonda sempre per difetto
- np.ceil(): arrotonda sempre per eccesso
- np.trunc(): rimuove la parte decimale
- np.rint(): arrotonda al numero intero più vicino, in modo simile a round
Ecco un confronto semplice:
import numpy as np
valori = np.array([2.9, 2.1, -2.9, -2.1])
print(np.floor(valori))
print(np.ceil(valori))
print(np.trunc(valori))
print(np.rint(valori))
Queste funzioni diventano molto comode quando si ha a che fare con array numerici di grandi dimensioni, perché permettono di applicare l’operazione a tutti gli elementi in una sola istruzione, senza usare cicli manuali.
Come scegliere la funzione di rounding più adatta
La scelta dipende dal risultato che vuoi ottenere:
- usa np.round() se ti serve un arrotondamento classico;
- usa np.floor() se vuoi scendere sempre al numero inferiore;
- usa np.ceil() se vuoi salire sempre al numero superiore;
- usa np.trunc() se ti basta eliminare i decimali senza vero arrotondamento.
È utile ricordare che il comportamento con i numeri negativi cambia molto tra una funzione e l’altra. Proprio per questo conviene fare qualche prova pratica, soprattutto se stai preparando dati per report, grafici o modelli numerici.
Impostare il numero di cifre decimali con NumPy
Uno degli aspetti più interessanti di np.round() è la possibilità di specificare il numero di decimali da mantenere. Questo si fa passando un secondo argomento alla funzione.
import numpy as np
valori = np.array([3.14159, 2.71828, 1.61803])
arrotondati = np.round(valori, 2)
print(arrotondati)
Con il valore 2, NumPy conserva due cifre dopo la virgola. È una soluzione molto utile quando si vogliono presentare risultati più leggibili o uniformare un insieme di dati.
Si possono usare anche valori negativi per arrotondare a sinistra della virgola, ad esempio alle decine o alle centinaia.
import numpy as np
valori = np.array([123, 567, 891])
arrotondati = np.round(valori, -1)
print(arrotondati)
In questo caso, i numeri vengono arrotondati alla decina più vicina. È una possibilità spesso sottovalutata, ma molto pratica quando si lavora con grandi quantità o dati aggregati.
Dettagli utili sul parametro decimals
Il parametro decimals controlla con precisione il livello di arrotondamento:
- 0 arrotonda all’intero più vicino;
- 2 mantiene due decimali;
- -1 arrotonda alle decine;
- -2 arrotonda alle centinaia.
Questo rende NumPy round molto flessibile, sia per semplici output leggibili sia per operazioni preparatorie su dataset più ampi.
Esempi pratici di arrotondamento con NumPy
Per capire davvero come funziona l’arrotondamento in NumPy, conviene osservare alcuni scenari concreti. In questo modo è più facile collegare la teoria al lavoro quotidiano con dati e array.
Arrotondare i prezzi in un array
Immaginiamo di avere una serie di prezzi con molte cifre decimali e di volerli mostrare con due decimali, come avviene normalmente in un contesto commerciale.
import numpy as np
prezzi = np.array([12.499, 3.4567, 99.999])
prezzi_finali = np.round(prezzi, 2)
print(prezzi_finali)
Questo approccio è molto utile quando si preparano dati per tabelle, dashboard o esportazioni.
Arrotondare sempre per eccesso
In alcuni casi, come il calcolo di pacchi, unità minime o soglie, può essere più corretto arrotondare sempre verso l’alto.
import numpy as np
quantita = np.array([1.2, 2.01, 4.8])
quantita_intere = np.ceil(quantita)
print(quantita_intere)
Con np.ceil(), anche un valore appena superiore all’intero viene portato al numero successivo.
Eliminare la parte decimale senza arrotondare
Se vuoi semplicemente tagliare i decimali, senza modificare la parte intera, puoi usare np.trunc().
import numpy as np
misure = np.array([7.9, 4.2, -3.8])
misure_troncate = np.trunc(misure)
print(misure_troncate)
Questa funzione è diversa da np.floor() e np.ceil(), soprattutto quando entrano in gioco valori negativi.
Applicare l’arrotondamento a una matrice NumPy
Le ufunc di NumPy non lavorano solo su array monodimensionali. Possono essere usate senza problemi anche su matrici.
import numpy as np
matrice = np.array([[1.2345, 2.3456], [3.4567, 4.5678]])
matrice_arrotondata = np.round(matrice, 3)
print(matrice_arrotondata)
Questo è uno dei motivi per cui NumPy è così apprezzato: permette di applicare trasformazioni numeriche in modo uniforme, elegante e molto veloce.