我如何在Python中表示无限大?无论您在程序中输入哪个数字,都不应比这个无限大的表示更大。
在Python中,你可以这样做:
test = float("inf")
在Python 3.5中,你可以这样做:
import math
test = math.inf
然后:
test > 1
test > 10000
test > x
除非x也是无穷大或“nan”(“不是数字”),否则将始终为真。
此外(仅适用于Python 2.x),与Ellipsis
的比较相比,float(inf)
更小,例如:
float('inf') < Ellipsis
将返回true。
-float("inf")
来获得负无穷,它比任何其他数字都要小。 - Sergey Zakharov自 Python 3.5 开始,您可以使用 math.inf
:
>>> import math
>>> math.inf
inf
似乎没有人明确提到负无穷大,所以我认为我应该补充一下。
对于负无穷大:
-math.inf
对于正无穷(仅为完整起见):
math.inf
float("inf")
,math.inf
和np.inf
有什么区别?在何时使用它们?这三者都代表正无穷大(positive infinity),但是它们的具体实现略有不同。float("inf")
是一个Python内置的浮点型常量,math.inf
是Python标准库中math模块的浮点型常量,而np.inf
是NumPy库中的浮点型常量。如果你只需要简单地表示正无穷大,可以使用任意一种方式。但是,如果你需要在数学计算中使用正无穷大,建议使用NumPy库中的np.inf
。因为NumPy提供了更多的数值运算函数和工具,使得使用np.inf
更加方便和高效。 - CGFoXfloat('inf')
大约需要185纳秒,而numpy和math版本都需要约70纳秒。这可能是因为float('inf')
需要解析字符串并执行一些检查。这么小的时间几乎总是太小而无法进行优化,但由于它们输入更快,我不明白为什么你会选择使用float('inf')
选项。 - undefined我不确定你具体在做什么,但是float("inf")
会给你一个浮点数无穷大(Infinity),它比任何其他数字都要大。
NumPy库中存在一个无穷大:from numpy import inf
。要获取负无穷大,只需写 -inf
。
float("inf")
、math.inf
和np.inf
之间有什么区别?应该在何时使用它们? - CGFoXnp.inf
需要Numpy包。float('inf')
有点hacky,因为它涉及解析字符串,但好处是它甚至不需要导入,并且解析通常在计算上可以忽略不计。如果您无论如何都使用其中一个数学包,则只需使用它们。如果您碰巧同时使用math
和np
,则np.inf
是最短的一个。 - Lenar Hoyt另一种不太方便的方法是使用Decimal
类:
from decimal import Decimal
pos_inf = Decimal('Infinity')
neg_inf = Decimal('-Infinity')
Decimal('Infinity') == float('inf')
的返回值是 True
,所以它们基本上是一样的。 - Denis Malinovskyfloat('inf') is float('inf')
的结果也是 False
。 - nemesisdesignfloat('inf') is float('inf')
的翻译是 False
,这只表明它们是不同的对象实例,但并不表示它们内部内容不同。实际上,像 @nemesisdesign 所指出的那样,float('int') == float('int')
是 True
。这和比较可变对象如 [1,2,3] is [1,2,3]
和 [1,2,3] == [1,2,3]
是一样的问题,分别返回 False
和 True
。更多信息请参见:https://dev59.com/F3A75IYBdhLWcg3w_uqD。 - Manoel VilelaPython2.x中有一个肮脏的Hack,可以用来实现这个目的(除非绝对必要,否则永远不要使用):
None < any integer < any string
因此,对于任何整数i,检查i <''
都成立。python3
已经合理地弃用了这种方法。现在这样的比较结果为:
TypeError: unorderable types: str() < int()
MIN_INFINITY = None; INFINITY = "inf"; MIN_INFINITY < x < INFINITY
- Ali Rasim Kocalfloat('inf')
和 float('-inf)
positive_infinity = float('inf')
negative_infinity = float('-inf')
import math
positive_infinity = math.inf
negative_infinity = -math.inf
maxsize
import sys
maxSize = sys.maxsize
minSize = -sys.maxsize
from decimal import Decimal
positive_infinity = Decimal('Infinity')
negative_infinity = Decimal('-Infinity')
from numpy import inf
positive_infinity = inf
negative_infinity = -inf
如果您使用 SymPy,您可以使用 sympy.oo
>>> from sympy import oo
>>> oo + 1
oo
>>> oo - oo
nan
等等。
pos_inf_val = float("infinity")
neg_inf_val = float("-infinity")
math.inf
在优化问题中作为初始值非常有用,因为它能正确地与min
函数配合使用,例如min(5, math.inf) == 5
。比如,在最短路径算法中,您可以将未知距离设置为math.inf
而不需要特殊处理None
或假定一个上限9999999
。同样地,对于最大化问题,您可以使用-math.inf
作为起始值。 - Colonel Panic应该有一种--最好只有一种--明显的方法来做到这一点。
- Sнаđошƒаӽmath
标准库中将其作为常量访问还是通过请求float
类型解析字符串"inf"
,浮点无穷大都是相同的内置对象。 - Karl Knechtel