【问题标题】:Why numpy.nan is different than math.nan?为什么 numpy.nan 与 math.nan 不同?
【发布时间】:2021-09-16 05:31:39
【问题描述】:

为什么math.nannumpy.nan 不同?

>>> import math
>>> import numpy as np
>>> math.nan is math.nan
True
>>> np.nan is np.nan
True
>>> np.nan is math.nan
False

拥有两个不同的 NaN 有什么意义?

【问题讨论】:

  • 它们是单独创建的,因此它们是单独的对象。它们具有相同的值(即使该值不等于自身)。
  • 它变得更糟:np.nan == np.nan 返回False
  • NaN 不是单例。 NaN 是一种具有特殊解释的位模式(实际上,有许多不同的 NaN,因为 NaN 可以具有“有效负载”)。同一个 NaN 可以有多个实例,就像 1.0 可以有多个实例一样。试试这个:x = 1.0; y = 1.0; print(x is y)。输出为 False。

标签: python python-3.x numpy math nan


【解决方案1】:

拥有两个不同的 NaN 有什么意义?

免责声明:我假设您想知道为什么会有 math.nannumpy.nan,如果这不成立,请完全忽略这个答案。

这是由于历史原因,math docs告知math.nan

3.5 版中的新功能。

NumPy 比这更早,PyPI NumPy release history 显示版本 1.0 发布于 2006 年 10 月,而根据PEP 478,Python 3.5.0 的第一个最终版本计划在 9 月发布2015,因此 NumPy 的创建者不可能使用math.nan。这导致了一个问题,如果 nan 已经在 numpy 中,为什么将其添加到 math。这可以简单解释:math 是内置模块,而numpy 不是。

作为旁注,您也可以在 python 中制作没有任何 imports 的 NaN,只需执行 float("NaN")

【讨论】:

    猜你喜欢
    • 2015-06-14
    • 1970-01-01
    • 2023-04-01
    • 2014-10-31
    • 1970-01-01
    • 2016-07-24
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多