python nan和inf值
是否有可能在Python中将数组元素设置为NaN
?
另外,是否可以将variables设置为+/-无穷大? 如果是这样,有没有什么function来检查一个数字是否是无穷的?
使用float()
从string中投射:
>>> float('NaN') nan >>> float('Inf') inf >>> -float('Inf') -inf >>> float('Inf') == float('Inf') True >>> float('Inf') == 1 False
是的,你可以使用numpy
。
import numpy as np a = arange(3,dtype=float) a[0] = np.nan a[1] = np.inf a[2] = -np.inf a # is now [nan,inf,-inf] np.isnan(a[0]) # True np.isinf(a[1]) # True np.isinf(a[2]) # True
是否有可能在Python中将数组元素设置为NaN?
是的,你总是可以包含一个NaN
或inf
在python list
(和类似的)。 但是,如果你想包含它在一个array
(例如array.array
或numpy.array
),那么数组的types必须是float
或complex
!
>>> import math >>> import numpy as np >>> arr = np.ones(1, float) # float array >>> arr[0] = math.nan >>> arr array([ nan]) >>> [math.nan, math.inf, -math.inf] # python list [nan, inf, -inf]
math
模块包含nan
和inf
常量(自Python 3.5以来)以及一些函数(从Python 2.6开始可用)来检查这些:
math.isnan
检查值是否为nan
:
>>> math.isnan(math.nan) # nan True
math.isinf
检查值是无穷大(正值还是负值):
>>> math.isinf(math.inf) # positive infinity True >>> math.isinf(-math.inf) # negative infinity True
还有一个函数,可以检查一个数字是不是 inf
或nan
: math.isfinite
(适用于Python 3.2+)
>>> math.isfinite(math.inf) False >>> math.isfinite(math.nan) False >>> math.isfinite(11.2) True
当使用Python 2.4时,请尝试
inf = float("9e999") nan = inf - inf
当我将simplejson移植到运行Python 2.4的embedded式设备时,我遇到了这个问题, float("9e999")
修复了这个问题。 不要使用inf = 9e999
,你需要从string转换它。 -inf
给出了-Infinity
。