2012-03-28 80 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