Pythonで無限数を表すにはどうすればよいですか?


559

Pythonで無限数を表すにはどうすればよいですか?プログラムにどの数値を入力しても、この無限大の表現を超える数値は使用できません。


29
math.inf最適化問題の初期値として有用です。たとえば、minで正しく動作するためです。min(5, math.inf) == 5。たとえば、最短経路アルゴリズムでは、math.inf特別な場合Noneや上限を想定することなく、不明な距離をに設定できます9999999。同様に、-math.inf最大化問題の開始値として使用できます。
パニック大佐、

ほとんどの場合、最適化の問題でmath.infを使用する代わりに、最初の値から始めることができます。
Tobias Bergkvist

回答:


707

Pythonでは、次のことができます。

test = float("inf")

Python 3.5では、次のことができます。

import math
test = math.inf

その後:

test > 1
test > 10000
test > x

常に本当でしょう。もちろん、指摘されていない限り、xは無限大または「ナン」(「非数」)でもあります。

さらに(Python 2.xのみ)は、と比較するとEllipsisfloat(inf)以下のようになります。

float('inf') < Ellipsis

trueを返します。


15
そして、xもinfの場合、それは真実ではありません。
Maxim Egorushkin、2011年

5
無限大は、IEEE 754-1985(en.wikipedia.org/wiki/IEEE_754-1985)の標準で定義されていることに注意してください。別のポイントは、この基準によれば、無限大は(明らかに)浮動小数点数でなければならないということです。これは、Pythonがこの厄介な構文を選択した理由を説明している可能性があります。
クイックバグ2015年

3
xが組み込みのものである場合も当てはまりません。これは、Ellipsis無限大を含むすべてのものよりも優れています。 float("inf") < EllipsisTrueを返します
シングルトン化された

2
少なくとも私にとっては、最後のものについてはわかりません、math.inf < ...またはをfloat('inf') > EllipsisスローTypeError: unorderable types: float() < ellipsis()します。
Peter Goldsborough

2
私は3.5にいます。おそらく2.x / 3.xのものです。
Peter Goldsborough

80

Python 3.5以降で使用できますmath.inf

>>> import math
>>> math.inf
inf

47

負の無限大についてはっきりと言及した人はいないようですので、付け加えておきましょう。

正の無限大の場合(完全を期すために):

math.inf

負の無限大の場合:

-math.inf

30

私はあなたが何をしているのか正確にはわかりませんがfloat("inf")、他のどの数値よりも大きいフロート無限大を与えます。


27

NumPyライブラリには無限大がありますfrom numpy import inf。負の無限大を得るには、単に次のように書くことができます-inf


24

別の、それほど便利ではない方法は、Decimalクラスを使用することです。

from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')

21
なぜそれが便利ではないのか、なぜ誰もがそれを使うべきなのかを追加しないのですか
ニコロ・

4
見てみましょう: Decimal('Infinity') == float('inf')戻り値なTrueので、ほとんど同じです。
Denis Malinovsky、2014年

8
@afzal_SHもfloat('inf') is float('inf')戻りFalseます
nemesisdesign 2015年

4
あなたのコメントは私にあまり意味がありませんでしたので、無限大は、私見としても、それ自体は異なっている
nemesisdesign

5
float('inf') is float('inf')-> False、それらは異なるインスタンスを持つ異なるオブジェクトであることを保持しますが、内部の内容が異なることをfloat('int') == float('int')保持しません-実際には@nemesisdesignが指摘したようにTrue。これは、[1,2,3]が[1,2,3]で[1,2,3] == [1,2,3]のような変更可能なオブジェクトを比較するのと同じ問題です。そして真の...詳しい情報を参照してください:stackoverflow.com/questions/2988017/...
マノエルVilela

13

python2.xには、この目的を果たすダーティなハックがありました(絶対に必要な場合を除き、絶対に使用しないでください)。

None < any integer < any string

したがって、チェックi < ''True任意の整数に適用されiます。

python3では合理的に廃止されています。今、そのような比較は、

TypeError: unorderable types: str() < int()

5
:あなたは本当にヨーヨー使用にこれを持っている場合は、少なくともいくつかのような読みやすい名前でそれを包むMIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
アリRasim Kocal

5
しかし、これを使用する必要はありません。
Joost

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.