Pythonで無限数を表すにはどうすればよいですか?プログラムにどの数値を入力しても、この無限大の表現を超える数値は使用できません。
ほとんどの場合、最適化の問題でmath.infを使用する代わりに、最初の値から始めることができます。
—
Tobias Bergkvist
Pythonで無限数を表すにはどうすればよいですか?プログラムにどの数値を入力しても、この無限大の表現を超える数値は使用できません。
回答:
Pythonでは、次のことができます。
test = float("inf")
Python 3.5では、次のことができます。
import math
test = math.inf
その後:
test > 1
test > 10000
test > x
常に本当でしょう。もちろん、指摘されていない限り、xは無限大または「ナン」(「非数」)でもあります。
さらに(Python 2.xのみ)は、と比較するとEllipsis、float(inf)以下のようになります。
float('inf') < Ellipsis
trueを返します。
Ellipsis無限大を含むすべてのものよりも優れています。 float("inf") < EllipsisTrueを返します
math.inf < ...またはをfloat('inf') > EllipsisスローTypeError: unorderable types: float() < ellipsis()します。
別の、それほど便利ではない方法は、Decimalクラスを使用することです。
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')戻り値なTrueので、ほとんど同じです。
float('inf') is float('inf')戻りFalseます
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/...
python2.xには、この目的を果たすダーティなハックがありました(絶対に必要な場合を除き、絶対に使用しないでください)。
None < any integer < any string
したがって、チェックi < ''はTrue任意の整数に適用されiます。
python3では合理的に廃止されています。今、そのような比較は、
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
また、SymPyを使用している場合は、 sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
等
math.inf最適化問題の初期値として有用です。たとえば、minで正しく動作するためです。min(5, math.inf) == 5。たとえば、最短経路アルゴリズムでは、math.inf特別な場合Noneや上限を想定することなく、不明な距離をに設定できます9999999。同様に、-math.inf最大化問題の開始値として使用できます。