
È possibile utilizzare np.floor(), np.trunc(), np.ceil(), ecc. per arrotondare per eccesso e per difetto gli elementi di un array NumPy ndarray.
Quando si ottiene valori negativi, quattro esistono tipi di arrotondamento per eccesso e per difetto.
In questo articolo vengono descritti i seguenti contenuti.
- Arrotonda per difetto (= arrotondato verso l’infinito negativo):
np.floor() - Arrotonda verso zero:
np.trunc(), np.fix(), cast to int - Arrotonda per eccesso (= arrotondato verso l’infinito positivo):
np.ceil() - Rotonda verso l’infinito
Si noti che np.rint() e np.around() vengono utilizzati per arrotondare a pari.
Vedere l’articolo seguente per arrotondare per eccesso o per difetto i punti decimali usando la matematica della libreria Python standard.
Il seguente numpy.ndarray viene utilizzato nel codice di esempio.
import numpy as np
print(np.__version__)
# 1.19.4
a = np.array([[10.0, 10.1, 10.9], [-10.0, -10.1, -10.9]])
print(a)
# [[ 10. 10.1 10.9]
# [-10. -10.1 -10.9]]
Arrotonda per difetto (= arrotondato verso l’infinito negativo):np.floor()
Usa np.floor() per arrotondare all’infinito negativo.
print(np.floor(a))
# [[ 10. 10. 10.]
# [-10. -11. -11.]]
print(np.floor(a).dtype)
# float64
Si noti che il tipo di dati del valore restituito è ancora un numero a virgola mobile float. Se vuoi convertirlo in un intero int, usa astype(). Lo stesso vale per np.trunc(), np.ceil(), ecc. descritti di seguito.
print(np.floor(a).astype(int))
# [[ 10 10 10]
# [-10 -11 -11]]
È anche possibile specificare un valore scalare. Lo stesso vale anche per np.trunc(), np.ceil(), ecc.
print(np.floor(10.1))
# 10.0
Arrotonda verso zero:np.trunc(), np.fix(), cast to int
Usa np.trunc() per arrotondare a zero.
print(np.trunc(a))
# [[ 10. 10. 10.]
# [-10. -10. -10.]]
Anche np.fix() arrotonda a zero.
print(np.fix(a))
# [[ 10. 10. 10.]
# [-10. -10. -10.]]
Anche il cast del tipo di dati da un numero a virgola mobile float a un intero int con astype() viene arrotondato a zero.
print(a.astype(int))
# [[ 10 10 10]
# [-10 -10 -10]]
Arrotonda per eccesso (= arrotondato verso l’infinito positivo):np.ceil()
Usa np.ceil() per arrotondare all’infinito positivo.
print(np.ceil(a))
# [[ 10. 11. 11.]
# [-10. -10. -10.]]
Rotonda verso l’infinito
A partire da NumPy 1.20, non viene fornita alcuna funzione per l’arrotondamento all’infinito. Ad esempio, può essere fatto come segue.
print(np.copysign(np.ceil(np.abs(a)), a))
# [[ 10. 11. 11.]
# [-10. -11. -11.]]
Il ndarray originale viene convertito in un valore assoluto con np.abs(), arrotondato per eccesso con np.ceil() e restituito al suo segno originale con np.copysign().
