2012-03-28 26 views
3

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

float('nan')失败,出现错误的答案ValueError: invalid literal for float(): nan

摘要:无论float('inf')也不float('nan')作品与Python 2.5和Windows。这是一个在Python 2.6中修复的bug。

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

如果您需要在不numpy的解决办法,那么您可以使用该溢出如1e1000表达式得到一个INF和1e1000/1e10001e1000 - 1e1000得到楠。

回答

3

另一种方式是将inf本身:

>>> float('inf')/float('inf') 
nan 

还是在一个比较模糊的方式,这可能无法跨平台工作(但各地的具体错误的工作在Python 2.5在Windows上):

>>> 1e31337/1e31337 
nan 
>>> 1e31337 - 1e31337 
nan 
+0

我测试了它,它的工作原理!谢谢。 – user763305 2012-03-28 21:36:59

+0

为什么不只是1e1000/1e1000?重点是1e1000溢出并给inf并且inf/inf是nan。 – user763305 2012-03-28 21:47:32

+0

@user:1e1337对我来说更好。我主要添加了'inf/inf'来明确第二个版本的工作原理。 – 2012-03-28 21:49:27

0

如果可能的话,升级你的Python发行版。 The behavior you listed is considered a bug.(注意:Cython链接)

通常,Python应该支持跨平台方式的nan的定义。这种行为似乎已经在Python 2.6和3.0中修复了。

Additional reading


当然,这个工作在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 
+0

我不是在写一个应用程序,而是在编写一个库,我可以让其他开发人员免费使用它,包括那些停留在Python 2.5中的可怜灵魂。 – user763305 2012-03-28 21:39:58

+0

@ user763305然后,yup,[this](http://stackoverflow.com/a/9916007/517815)是要走的路。 :) – MrGomez 2012-03-28 21:44:53

1

已经有一个接受的回答这个问题,但我认为以下应该工作,如果你不想依靠溢出和安装numpy ...(没有测试,因为我没有python2.5或windows)

>>> import numpy as np 
>>> np.nan 
nan 
>>> np.inf 
inf 
+0

它的工作。我在Windows上测试了Python 2.5。我已经更新了这个问题。 – user763305 2012-03-29 07:00:48