
In Python, puoi usare inf per l’infinito.
Questo articolo descrive come creare, utilizzare, controllare e infinity inf.
- Inf infinito di tipo float
- Infinito negativo
- Converti in altri tipi
- Crea infinito inf
- float(‘inf’)
- float che supera il valore massimo
- Modulo di matematica nella libreria standard:
math.inf - NumPy:
np.inf
- Operazioni con infinito inf
- Controlla se X è infinito inf:
==, math.isinf(), np.isinf()- == operatore
- math.isinf()
- np.isinf(), np.isposinf(), np.isneginf(), np.isfinite()
- Confronta con infinito inf
- Confronta con il numero in virgola galleggiante mobile
- Confronta con nonna
- Confronta con intero int
Inf infinito di tipo float
In Python, il tipo float (numeri in virgola mobile) include inf, che rappresenta l’infinito.
Puoi creare inf tramite float(‘inf’). Altri modi sono descritti più avanti.
f_inf = float('inf')
print(f_inf)
# inf
print(type(f_inf))
# <class 'float'>
Infinito negativo
L’infinito negativo può essere aggiunto – all’infinito inf.
f_inf_minus = -float('inf')
print(f_inf_minus)
# -inf
print(type(f_inf_minus))
# <class 'float'>
Converti in altri tipi
Normalmente, float può essere convertito in un intero int con int(), ma inf non può essere convertito in int.
# print(int(f_inf))
# OverflowError: cannot convert float infinity to integer
Nota che intero int non ha limiti massimi in Python3.
inf può essere convertito nella stringa str con str(). Viene convertito in ‘inf’.
print(str(f_inf))
# inf
print(type(str(f_inf)))
# <class 'str'>
Crea infinito inf
Esistono diversi modi per creare inf.
float(‘inf’)
Come mostrato nell’esempio sopra, puoi creare inf specificando la stringa ‘inf’ in float().
Puoi anche usare “infinito”. Minuscolo e maiuscolo possono essere mischiati (senza distinzione tra maiuscole e minuscole).
print(float('inf'))
# inf
print(float('infinity'))
# inf
print(float('INF'))
# inf
print(float('INFinity'))
# inf
float che supera il valore massimo
I numeri in virgola mobile che superano il valore massimo di float vengono automaticamente trattati come inf.
import sys
f_inf_num = sys.float_info.max * 2
print(f_inf_num)
# inf
sys.float_info.max viene utilizzato per ottenere il valore massimo di float.
Modulo di matematica nella libreria standard:math.inf
Puoi creare inf come math.inf importando il modulo matematico della libreria standard. math.inf è anche un tipo float, non un tipo speciale.
import math
print(math.inf)
# inf
print(type(math.inf))
# <class 'float'>
print(float('inf') == math.inf)
# True
NumPy:np.inf
Puoi anche creare inf con NumPy. np.inf è anche un float, non un tipo speciale.
import numpy as np
print(np.inf)
# inf
print(type(np.inf))
# <class 'float'>
print(float('inf') == np.inf)
# True
Operazioni con infinito inf
L’addizione, la sottrazione, la moltiplicazione, la divisione e l’esponenziazione possono essere eseguite con infinito inf.
aggiunta
In commento da ciò che aggiungi a infinity inf, il risultato è infinity inf.
print(float('inf') + 100)
# inf
print(float('inf') + float('inf'))
# inf
Sottrazione
Sottrai infinity inf da infinity inf per ottenere nan. nan è anche un tipo float e sta per Not a Number.
Se sottrai qualsiasi altro valore da infinity inf, il risultato è inf.
print(float('inf') - 100)
# inf
print(float('inf') - float('inf'))
# nan
print(type(float('inf') - float('inf')))
# <class 'float'>
Moltiplicazione
Infinity inf moltiplicato per 0 è nan. Se moltiplichi per qualsiasi altro numero, ottieni infinito inf.
print(float('inf') * 2)
# inf
print(float('inf') * float('inf'))
# inf
print(float('inf') * 0)
# nan
Divisione
Infinity inf diviso per infinito inf è nan. Dividendo 0 per infinito inf è 0. Se dividi per 0, viene generato un errore.
Altrimenti, il risultato è infinito inf.
print(float('inf') / 2)
# inf
print(float('inf') / float('inf'))
# nan
print(0 / float('inf'))
# 0.0
# print(float('inf') / 0)
# ZeroDivisionError: float division by zero
Esponenziale
Infinity inf alla potenza di 0 è 1. 1 alla potenza di inf è 1. 0 alla potenza di inf è 0.
Altrimenti, il risultato è infinito inf.
print(float('inf') ** 2)
# inf
print(float('inf') ** float('inf'))
# inf
print(float('inf') ** 0)
# 1.0
print(2 ** float('inf'))
# inf
print(1 ** float('inf'))
# 1.0
print(0 ** float('inf'))
# 0.0
Controlla se X è infinito inf:==, math.isinf(), np.isinf()
Usa valori infiniti e non infiniti come esempi. eXXX significa 10 alla potenza di XXX.
import math
import numpy as np
print(1e1000)
# inf
print(1e100)
# 1e+100
== operatore
Puoi controllare se un valore è infinity inf con ==.
print(1e1000 == float('inf'))
# True
print(1e100 == float('inf'))
# False
Esistono diversi modi per creare un inf infinito, ma poiché sono tutti dello stesso tipo float, non quale importa utilizza.
print(float('inf') == math.inf == np.inf)
# True
print(1e1000 == math.inf)
# True
print(1e100 == math.inf)
# False
Inoltre, come accennato in precedenza, molti dei risultati aritmetici di infinity inf sono infinity inf, quindi anche la seguente espressione è True.
print(float('inf') == float('inf') * 100)
# True
math.isinf()
Il modulo math fornisce la funzione math.isinf().
math.isinf() produce True anche per infinito negativo.
print(math.isinf(1e1000))
# True
print(math.isinf(1e100))
# False
print(math.isinf(-1e1000))
# True
np.isinf(), np.isposinf(), np.isneginf(), np.isfinite()
NumPy fornisce np.isinf(), np.isposinf(), np.isneginf() e np.isfinite().
np.isinf() True per infinito positivo e negativo, np.isfinite() produce True per infinito positivo, np.isneginf() produce True per infinito negativo e np.isfinite() produce True per valori finiti.
Ogni funzione accetta un oggetto simile a un array come un array NumPy ndarray o un elenco come argomento. Viene restituito un ndarray i cui elementi sono True e False.
a = np.array([1, np.inf, -np.inf])
print(a)
# [ 1. inf -inf]
print(np.isinf(a))
# [False True True]
print(np.isposinf(a))
# [False True False]
print(np.isneginf(a))
# [False False True]
print(np.isfinite(a))
# [ True False False]
Puoi anche specificare un valore scalare, come math.isinf().
print(np.isinf(1e1000))
# True
Viene fornito anche np.nan_to_qualsiasinum(), che sostituisce infinity con valore.
Per la configurazione predefinita, i valori infinito vengono sostituiti dai valori finiti più grandi. È possibile specificare il valore da sostituire per gli argomenti posinf e neginf, che sono stati aggiunti in NumPy1.17.
print(np.nan_to_num(a))
# [ 1.00000000e+000 1.79769313e+308 -1.79769313e+308]
print(np.nan_to_num(a, posinf=1e100, neginf=-1e100))
# [ 1.e+000 1.e+100 -1.e+100]
Per impostazione predefinita, viene creato un nuovo ndarray, ma se secondo l’argomento copy è impostato su False, il ndarray originale viene aggiornato.
np.nan_to_num(a, copy=False)
print(a)
# [ 1.00000000e+000 1.79769313e+308 -1.79769313e+308]
Nota che np.nan_to_num() sostituisce anche il valore mancante nan, come suggerisce il nome. Vedere il seguente articolo per i dettagli.
Confronta con infinito inf
È possibile con infinity inf e altri valori gli operatori di confronto (>> <, ecc.).
Infinity inf è paragonabile ai valori float e int ed è maggiore di tutti tranne nan. Qualsiasi risultato rispetto a nan è falso.
Confronta con il numero in virgola galleggiante mobile
Usa il valore massimo di float come esempio.
Infinity inf è maggiore del valore massimo di float e infinito negativo è inferiore al valore minimo di float.
import sys
print(sys.float_info.max)
# 1.7976931348623157e+308
print(float('inf') > sys.float_info.max)
# True
print(-float('inf') < -sys.float_info.max)
# True
Confronta con nonna
nan è un valore speciale del tipo float, che può essere creato con float(‘nan’).
print(float('nan'))
# nan
print(type(float('nan')))
# <class 'float'>
Il confronto con nan è sempre falso.
print(float('inf') > float('nan'))
# False
print(float('inf') < float('nan'))
# False
print(float('inf') == float('nan'))
# False
Confronta con intero int
Infinity inf può anche essere confrontato con intero int.
print(float('inf') > 100)
# True
Poiché non esiste un limite mac per integer int in Python3, è possibile memorizzare valori che superano il valore massimo di float, ma infinity inf è maggiore di tale valore.
large_int = int(sys.float_info.max) * 10
print(large_int)
# 1797693134862315708145274237317043567980705675258449965989174768031572607800285387605895586327668781715404589535143824642343213268894641827684675467035375169860499105765512820762454900903893289440758685084551339423045832369032229481658085593321233482747978262041447231687381771809192998812504040261841248583680
print(type(large_int))
# <class 'int'>
print(large_int > sys.float_info.max)
# True
print(float('inf') > large_int)
# True
Si noti che i valori interi int inferiori al valore massimo di float possono essere convertiti in float con float(), ma i valori interi int maggiori del valore massimo di float non possono essere convertiti in float.
print(float(10**308))
# 1e+308
# print(float(10**309))
# OverflowError: int too large to convert to float
