Skip to content

“inf” per infinito in Python

Python

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