在Windows上使用Python 2.5实现Nan

在Windows上使用Python 2.5实现Nan,python,windows,nan,python-2.5,Python,Windows,Nan,Python 2.5,如何在Windows上使用Python 2.5创建Nan float('nan')失败,错误为ValueError:float()的文本无效:nan 答案摘要:无论是float('inf')还是float('nan')都不适用于Python 2.5和Windows。这是Python2.6中修复的一个bug 如果您使用的是numpy,那么可以使用numpy.inf和numpy.nan 如果需要不带numpy的解决方法,则可以使用溢出的表达式,例如1e1000来获取inf,以及1e1000/1e10

如何在Windows上使用Python 2.5创建Nan

float('nan')
失败,错误为
ValueError:float()的文本无效:nan

答案摘要:无论是
float('inf')
还是
float('nan')
都不适用于Python 2.5和Windows。这是Python2.6中修复的一个bug

如果您使用的是numpy,那么可以使用
numpy.inf
numpy.nan


如果需要不带numpy的解决方法,则可以使用溢出的表达式,例如
1e1000
来获取inf,以及
1e1000/1e1000
1e1000-1e1000
来获取nan。

另一种方法是将
inf
本身除以:

>>> float('inf') / float('inf')
nan
或者以一种更隐晦的方式,可能无法跨平台工作(但可以在Windows上解决Python 2.5中的特定错误):


如果可能,升级Python发行版。(注:链接。)

按照规范,Python应该以跨平台的方式支持
nan
的定义。这种行为在Python2.6和3.0中似乎已经修复

()


当然,这在Python的Linux版本中是有效的:

$ python2.4
Python 2.4.3 (#1, Sep 21 2011, 19:55:41) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> float('nan')
nan

$ python2.5
Python 2.5.2 (r252:60911, Jun 26 2008, 10:20:40) 
[GCC 4.1.2 20070626 (Red Hat 4.1.2-14)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> float('nan')
nan

这个问题已经有了一个公认的答案,但我认为如果您不想依赖溢出并安装了numpy,那么下面的方法应该可以奏效。。。(未测试,因为我没有python2.5或windows)


我不是在写一个应用程序,我在写一个库,我将免费提供给其他开发者,包括那些被Python 2.5困住的可怜的灵魂。@user763305,是的,这是一条路。:)为什么不仅仅是1e1000/1e1000?关键是1e1000溢出并给出inf,inf/inf为nan。@用户:1e1337在我看来更好。我主要添加了
inf/inf
,以明确第二个版本的工作原理。@drewk:不,它不工作。用Python2.5和Windows测试它,您将看到。但是1e1000-1e1000是有效的。@user763305:Windows上没有2.5我相信你的话,但那将是一个错误,不是吗?@drewk:是的,正是同一个错误阻止了
float('nan')
工作。它有效。我在Windows上使用Python 2.5进行了测试。我已经更新了问题。
$ python2.4
Python 2.4.3 (#1, Sep 21 2011, 19:55:41) 
[GCC 4.1.2 20080704 (Red Hat 4.1.2-51)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> float('nan')
nan

$ python2.5
Python 2.5.2 (r252:60911, Jun 26 2008, 10:20:40) 
[GCC 4.1.2 20070626 (Red Hat 4.1.2-14)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> float('nan')
nan
>>> import numpy as np
>>> np.nan
nan
>>> np.inf
inf