Wie kann ich in Python eine unendliche Zahl darstellen?
559
Wie kann ich eine unendliche Zahl in Python darstellen? Unabhängig davon, welche Zahl Sie in das Programm eingeben, sollte keine Zahl größer sein als diese Darstellung der Unendlichkeit.
math.infist als Anfangswert bei Optimierungsproblemen nützlich, da es mit min korrekt funktioniert, z. min(5, math.inf) == 5. Beispielsweise können Sie bei Algorithmen mit kürzesten Pfaden unbekannte Entfernungen festlegen, math.infohne dass ein Sonderfall erforderlich ist Noneoder eine Obergrenze angenommen wird 9999999. Ebenso können Sie -math.infals Startwert für Maximierungsprobleme verwenden.
Colonel Panic
In den meisten Fällen besteht eine Alternative zur Verwendung von math.inf bei Optimierungsproblemen darin, mit dem ersten Wert zu beginnen.
Tobias Bergkvist
Antworten:
707
In Python können Sie Folgendes tun:
test = float("inf")
In Python 3.5 können Sie Folgendes tun:
import math
test = math.inf
Und dann:
test >1
test >10000
test > x
Wird immer wahr sein. Es sei denn natürlich, wie bereits erwähnt, ist x auch unendlich oder "nan" ("keine Zahl").
Zusätzlich (Python 2.x ONLY), im Vergleich zu Ellipsis, float(inf)ist weniger, zum Beispiel:
Und wenn x auch inf ist, wird das nicht wahr sein.
Maxim Egorushkin
5
Beachten Sie, dass Unendlichkeit in der Norm IEEE 754-1985 ( en.wikipedia.org/wiki/IEEE_754-1985 ) definiert ist, auf die sich jede moderne Sprache stützen wird. Ein weiterer Punkt ist, dass nach dieser Norm die Unendlichkeit (offensichtlich) eine Gleitkommazahl sein muss. Dies könnte erklären, warum Python diese akward-Syntax gewählt hat.
Quickbug
3
Es wird auch nicht wahr sein, wenn x das eingebaute ist Ellipsis, das mehr als alles vergleicht, einschließlich der Unendlichkeit. float("inf") < Ellipsisgibt True zurück
Singletoned
2
Ich bin mir nicht sicher über den letzten math.inf < ...oder float('inf') > Ellipsiswerfe einen TypeError: unorderable types: float() < ellipsis(), zumindest für mich.
Peter Goldsborough
2
Ich bin auf 3.5. Wahrscheinlich eine 2.x / 3.x Sache.
Peter Goldsborough
80
Seit Python 3.5 können Sie Folgendes verwenden math.inf:
In der NumPy-Bibliothek gibt es eine Unendlichkeit : from numpy import inf. Um eine negative Unendlichkeit zu erreichen, kann man einfach schreiben -inf.
Warum fügst du nicht hinzu, warum es weniger bequem ist und warum jemand es verwenden sollte ?
Niccolò
4
Mal sehen: Decimal('Infinity') == float('inf')kehrt zurück True, also ist es ziemlich dasselbe.
Denis Malinovsky
8
@afzal_SH float('inf') is float('inf')kehrt Falseauch zurück
nemesisdesign
4
Unendlichkeit unterscheidet sich sogar von sich selbst, so dass Ihr Kommentar für mich nicht viel Sinn machte, IMHO
nemesisdesign
5
float('inf') is float('inf')-> False, gilt nur, dass es sich um unterschiedliche Objekte mit unterschiedlichen Instanzen handelt, aber nicht, dass die internen Inhalte unterschiedlich sind - tatsächlich, wie @nemesisdesign gezeigt float('int') == float('int')hat True. Dies ist das gleiche Problem wie beim Vergleich von veränderlichen Objekten wie [1,2,3] [1,2,3] und [1,2,3] == [1,2,3], die der Reihe nach falsch sind und True .. Weitere Informationen finden Sie unter: stackoverflow.com/questions/2988017/…
Manoel Vilela
13
In python2.x gab es einen schmutzigen Hack, der diesem Zweck diente (NIEMALS verwenden, es sei denn, dies ist absolut notwendig):
None< any integer < any string
Somit ist die Überprüfung i < ''hält Truefür jede ganze Zahl i.
Es wurde in Python3 einigermaßen veraltet. Nun enden solche Vergleiche mit
math.inf
ist als Anfangswert bei Optimierungsproblemen nützlich, da es mit min korrekt funktioniert, z.min(5, math.inf) == 5
. Beispielsweise können Sie bei Algorithmen mit kürzesten Pfaden unbekannte Entfernungen festlegen,math.inf
ohne dass ein Sonderfall erforderlich istNone
oder eine Obergrenze angenommen wird9999999
. Ebenso können Sie-math.inf
als Startwert für Maximierungsprobleme verwenden.Antworten:
In Python können Sie Folgendes tun:
In Python 3.5 können Sie Folgendes tun:
Und dann:
Wird immer wahr sein. Es sei denn natürlich, wie bereits erwähnt, ist x auch unendlich oder "nan" ("keine Zahl").
Zusätzlich (Python 2.x ONLY), im Vergleich zu
Ellipsis
,float(inf)
ist weniger, zum Beispiel:würde wahr zurückgeben.
quelle
Ellipsis
, das mehr als alles vergleicht, einschließlich der Unendlichkeit.float("inf") < Ellipsis
gibt True zurückmath.inf < ...
oderfloat('inf') > Ellipsis
werfe einenTypeError: unorderable types: float() < ellipsis()
, zumindest für mich.Seit Python 3.5 können Sie Folgendes verwenden
math.inf
:quelle
Niemand scheint explizit über die negative Unendlichkeit gesprochen zu haben, also denke ich, ich sollte es hinzufügen.
Für eine positive Unendlichkeit (nur der Vollständigkeit halber):
Für negative Unendlichkeit:
quelle
Ich weiß nicht genau, was Sie tun, aber
float("inf")
Sie erhalten eine Float-Unendlichkeit, die größer ist als jede andere Zahl.quelle
In der NumPy-Bibliothek gibt es eine Unendlichkeit :
from numpy import inf
. Um eine negative Unendlichkeit zu erreichen, kann man einfach schreiben-inf
.quelle
Eine andere, weniger bequeme Möglichkeit, dies zu tun, ist die Verwendung von
Decimal
class:quelle
Decimal('Infinity') == float('inf')
kehrt zurückTrue
, also ist es ziemlich dasselbe.float('inf') is float('inf')
kehrtFalse
auch zurückfloat('inf') is float('inf')
->False
, gilt nur, dass es sich um unterschiedliche Objekte mit unterschiedlichen Instanzen handelt, aber nicht, dass die internen Inhalte unterschiedlich sind - tatsächlich, wie @nemesisdesign gezeigtfloat('int') == float('int')
hatTrue
. Dies ist das gleiche Problem wie beim Vergleich von veränderlichen Objekten wie [1,2,3] [1,2,3] und [1,2,3] == [1,2,3], die der Reihe nach falsch sind und True .. Weitere Informationen finden Sie unter: stackoverflow.com/questions/2988017/…In python2.x gab es einen schmutzigen Hack, der diesem Zweck diente (NIEMALS verwenden, es sei denn, dies ist absolut notwendig):
Somit ist die Überprüfung
i < ''
hältTrue
für jede ganze Zahli
.Es wurde in Python3 einigermaßen veraltet. Nun enden solche Vergleiche mit
quelle
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
Auch wenn Sie SymPy verwenden, können Sie verwenden
sympy.oo
usw.
quelle