In Python können Sie inf für unendlich verwenden.
Dieser Artikel Das Erstellen, Bedienen, Prüfen und Vergleichen von Infinity inf.
- Infinity inf vom Float-Typ
- Negative Unendlichkeit
- In andere Typen umwandeln
- Unendlich inf erstellen
- float(‚inf‘)
- Float, der den Maximalwert überschreitet
- Math-Modul in der Standardbibliothek:
math.inf
- NumPy:
np.inf
- Operationen mit unendlicher Inf
- Prüfen Sie, ob X unendlich ist inf:
==, math.isinf(), np.isinf()
- == Betreiber
- math.isinf()
- np.isinf(), np.isposinf(), np.isneginf(), np.isfinite()
- Vergleiche mit unendlicher Inf
- Vergleichen Sie mit Fließkommazahl Float
- Vergleiche mit Nan
- Vergleichen mit Integer int
Infinity inf vom Float-Typ
In Python enthält der Float-Typ (Gleitkommazahlen) inf, was für unendlich steht.
Sie können inf durch float(‚inf‘) erstellen. Andere Möglichkeiten werden später beschrieben.
f_inf = float('inf')
print(f_inf)
# inf
print(type(f_inf))
# <class 'float'>
Negative Unendlichkeit
Negative Unendlichkeit kann durch Hinzufügen von – zur Unendlichkeit inf dargestellt werden.
f_inf_minus = -float('inf')
print(f_inf_minus)
# -inf
print(type(f_inf_minus))
# <class 'float'>
In andere Typen umwandeln
Normalerweise kann Float mit int() in eine Ganzzahl int konvertiert werden, aber inf kann nicht in int konvertiert werden.
# print(int(f_inf))
# OverflowError: cannot convert float infinity to integer
Beachten Sie, dass integer int in Python3 keine Obergrenze hat.
inf kann mit str() in den String str umgewandelt werden. Es wird in ‚inf‘ umgewandelt.
print(str(f_inf))
# inf
print(type(str(f_inf)))
# <class 'str'>
Unendlich inf erstellen
Es gibt mehrere Möglichkeiten, inf zu erstellen.
float(‚inf‘)
Wie im obigen Beispiel gezeigt, can SIE inf erstellen, indem SIE die Zeichenfolge „inf“ für float() angeben.
Sie können auch „unendlich“ verwenden. Klein- und Großbuchstaben können gemischt werden (Groß- und Kleinschreibung wird nicht beachtet).
print(float('inf'))
# inf
print(float('infinity'))
# inf
print(float('INF'))
# inf
print(float('INFinity'))
# inf
Float, der den Maximalwert überschreitet
Fließkommazahlen, die den maximalen Wert von float überschreiten, werden automatisch als inf behandelt.
import sys
f_inf_num = sys.float_info.max * 2
print(f_inf_num)
# inf
sys.float_info.max WIRD verwendet, um den maximalen Wert von Float zu erhalten.
Math-Modul in der Standardbibliothek:math.inf
Sie können inf als math.inf erstellen, ohne dass Sie das Math-Modul der Standardbibliothek importieren. math.inf ist auch ein Float-Typ, kein spezieller Typ.
import math
print(math.inf)
# inf
print(type(math.inf))
# <class 'float'>
print(float('inf') == math.inf)
# True
NumPy:np.inf
Sie können auch mit NumPy erstellen. np.inf ist auch ein Float, kein spezieller Typ.
import numpy as np
print(np.inf)
# inf
print(type(np.inf))
# <class 'float'>
print(float('inf') == np.inf)
# True
Operationen mit unendlicher Inf
Addition, Subtraktion, Multiplikation, Division und Potenzierung can with infinite inf durchgeführt Werden.
Ergänzung
Egal, was Sie zu unendlich inf hinzufügen, das Ergebnis ist unendlich inf.
print(float('inf') + 100)
# inf
print(float('inf') + float('inf'))
# inf
Subtraktion
Subtrahieren Sie unendlich inf von unendlich inf, um nan zu erhalten. nan ist ebenfalls ein Float-Typ und steht für Not a Number.
Wenn Sie einen anderen Wert von unendlich inf subtrahieren, ist das Ergebnis inf.
print(float('inf') - 100)
# inf
print(float('inf') - float('inf'))
# nan
print(type(float('inf') - float('inf')))
# <class 'float'>
Multiplikation
Infinity inf multipliziert mit 0 ist nan. Wenn Sie mit einer anderen Zahl multiplizieren, erhalten Sie unendliche Inf.
print(float('inf') * 2)
# inf
print(float('inf') * float('inf'))
# inf
print(float('inf') * 0)
# nan
Aufteilung
Unendlich inf geteilt durch unendlich inf ist nan. Teilen von 0 durch unendlich inf ist 0. Wenn Sie durch 0 teilen, wird ein Fehler ausgegeben.
Andernfalls ist das Ergebnis unendlich 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
Potenzierung
Unendlich inf hoch 0 ist 1. 1 hoch inf ist 1. 0 hoch inf ist 0.
Andernfalls ist das Ergebnis unendlich 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
Prüfen Sie, ob X unendlich ist inf:==, math.isinf(), np.isinf()
Verwenden Sie als Beispiele unendliche und nicht unendliche Werte. eXXX bedeutet 10 hoch XXX.
import math
import numpy as np
print(1e1000)
# inf
print(1e100)
# 1e+100
== Betreiber
Sie können mit == prüfen, ob ein Wert unendlich inf ist.
print(1e1000 == float('inf'))
# True
print(1e100 == float('inf'))
# False
Es gibt mehrere Möglichkeiten, ein unendliches Inf zu erstellen, aber da sie alle vom gleichen Float-Typ sind, spielt es keine Rolle, welche SIE verwenden.
print(float('inf') == math.inf == np.inf)
# True
print(1e1000 == math.inf)
# True
print(1e100 == math.inf)
# False
Außerdem sind, wie oben erwähnt, viele der arithmetischen Ergebnisse von unendlich inf unendlich inf, sodass der folgende Ausdruck ebenfalls wahr ist.
print(float('inf') == float('inf') * 100)
# True
math.isinf()
Das Math-Modul stellt die Funktion math.isinf() zur Verfügung.
math.isinf() gibt True sogar für negative Unendlichkeit zurück.
print(math.isinf(1e1000))
# True
print(math.isinf(1e100))
# False
print(math.isinf(-1e1000))
# True
np.isinf(), np.isposinf(), np.isneginf(), np.isfinite()
NumPy bietet np.isinf(), np.isposinf(), np.isneginf() und np.isfinite().
np.isinf() gibt True für positive und negative Unendlichkeit zurück, np.isposinf() gibt True für positive Unendlichkeit zurück, np.isneginf() gibt True für negative Unendlichkeit zurück und np.isfinite() gibt True für endliche Werte zurück.
Jede Funktion akzeptiert ein Array-ähnliches Objekt wie ein NumPy-Array ndarray oder eine Liste als Argument. Es wird ein ndarray zurückgegeben, dessen Elemente True und False sind.
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]
Sie können auch einen Skalarwert wie math.isinf() angeben.
print(np.isinf(1e1000))
# True
np.nan_to_num(), das unendlich durch einen beliebigen Wert ersetzt, ist ebenfalls vorhanden.
Standardmäßig werden unendliche Werte durch die kleinsten endlichen Werte ersetzt. Sie können den zu ersetzenden Wert für die Argumente posinf und neginf angeben, die in NumPy1.17 hinzugefügt wurden.
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]
Standardmäßig WIRD ein neues Ndarray erstellt, aber wenn das zweite Argument copy auf False gesetzt ist, wird das ursprüngliche Ndarray aktualisiert.
np.nan_to_num(a, copy=False)
print(a)
# [ 1.00000000e+000 1.79769313e+308 -1.79769313e+308]
Beachten Sie, dass np.nan_to_num() auch den fehlenden Wert nan ersetzt, wie der Name schon sagt. Nichts finden Sie im folgenden Artikel.
Vergleiche mit unendlicher Inf
Sie können unendlich inf und andere Werte mit Vergleichsoperatoren (>, < usw.) vergleichen.
Infinity inf ist vergleichbar mit float- und int-Werten und größer als alle anderen außer nan. Jedes Ergebnis im Vergleich zu nan ist falsch.
Vergleichen Sie mit Fließkommazahl Float
Verwenden Sie als Beispiel den maximalen Wert von Float.
Infinity inf ist größer als der Maximalwert von float, und negativ unendlich ist kleiner als der Minimalwert von 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
Vergleiche mit Nan
nan ist ein spezieller Wert vom Typ float, der mit float(’nan‘) erzeugt werden kann.
print(float('nan'))
# nan
print(type(float('nan')))
# <class 'float'>
Der Vergleich mit nan ist immer falsch.
print(float('inf') > float('nan'))
# False
print(float('inf') < float('nan'))
# False
print(float('inf') == float('nan'))
# False
Vergleichen mit Integer int
Infinity inf kann auch mit integer int aufgenommen werden.
print(float('inf') > 100)
# True
Da es in Python3 keine Mac-Grenze für Integer Int gibt, ist es möglich, Werte zu speichern, sterben den Maximalwert von Float überschreiten, aber Infinity Inf ist größer als ein solcher Wert.
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
Beachten Sie, dass Integer-Int-Werte, die kleiner als der Maximalwert von Float sind, mit float() in Float converted Werden können, Integer-Int-Werte, die größer als der Maximalwert jedoch von Float sind, can nicht in Float converted werden.
print(float(10**308))
# 1e+308
# print(float(10**309))
# OverflowError: int too large to convert to float