【问题标题】:Nan with Python 2.5 on WindowsNan 在 Windows 上使用 Python 2.5
【发布时间】:2012-03-28 21:30:36
【问题描述】:

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

float('nan') 失败并出现错误ValueError: invalid literal for float(): nan

答案总结:float('inf')float('nan') 都不适用于 Python 2.5 和 Windows。这是 Python 2.6 中修复的错误。

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

如果您需要一个没有 numpy 的解决方法,那么您可以使用溢出的表达式,例如 1e1000 来获取 inf,并使用 1e1000 / 1e10001e1000 - 1e1000 来获取 nan。

【问题讨论】:

    标签: python windows nan python-2.5


    【解决方案1】:

    另一种方法是将inf 自己分开:

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

    或者以更隐蔽的方式,它可能无法跨平台工作(但可以解决 Windows 上 Python 2.5 中的特定错误):

    >>> 1e31337 / 1e31337
    nan
    >>> 1e31337 - 1e31337
    nan
    

    【讨论】:

    • 为什么不只是 1e1000 / 1e1000 ?重点是1e1000溢出,给出inf,inf/inf是nan。
    • @user: 1e1337 对我来说看起来更好。我主要添加了inf/inf,以明确为什么第二个版本有效。
    • @drewk:不,它不起作用。使用 Python 2.5 和 Windows 对其进行测试,您将看到。但是 1e1000 - 1e1000 有效。
    • @user763305:在 Windows 上没有 2.5 我相信你的话,但这将是一个错误,不是吗?
    • @drewk:是的,这与阻止float('nan') 工作的错误相同。
    【解决方案2】:

    这个问题已经有一个公认的答案,但我认为如果你不想依赖溢出并安装了 numpy,以下应该可以工作......(没有经过测试,因为我没有'没有python2.5或windows)

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

    【讨论】:

    • 它有效。我在 Windows 上使用 Python 2.5 进行了测试。我已经更新了问题。
    【解决方案3】:

    如果可能,请升级您的 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
    

    【讨论】:

    • 我不是在编写应用程序,而是在编写一个库,我将免费提供给其他开发人员,包括那些被 Python 2.5 困住的可怜人。
    • @user763305 然后,是的,this 是要走的路。 :)
    猜你喜欢
    • 1970-01-01
    • 2010-10-24
    • 2012-08-23
    • 1970-01-01
    • 2011-04-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    相关资源
    最近更新 更多