【问题标题】:numpy.isnan(value) not the same as value == numpy.nan?numpy.isnan(value) 与 value == numpy.nan 不同?
【发布时间】:2015-06-14 04:54:37
【问题描述】:

为什么我会得到以下信息:

>>> v
nan
>>> type(v)
<type 'numpy.float64'>
>>> v == np.nan
False
>>> np.isnan(v)
True

我会认为这两者应该是等价的?

【问题讨论】:

  • 另见:stackoverflow.com/a/1573715/325565(不直接与 python 相关,但由 IEEE-754 委员会成员编写,该委员会定义了为什么会这样)
  • 我想两个未定义的值不能被比较为相同是有道理的,因为它们在定义上是未定义的。当您第一次遇到 nan != nan 错误时,您会感到有些困惑!

标签: python numpy types boolean nan


【解决方案1】:

nan != nan。这就是nan 上的相等比较的定义方式。已确定此结果对于数值算法比替代方法更方便。这就是 isnan 存在的具体原因。

【讨论】:

  • 谢谢!调试时这让我彻底困惑了一段时间:)
  • 顺便说一下,这可能是由于 IEEE 754 规定: 可能存在四种互斥关系:小于、等于、大于和无序。最后一种情况出现在至少一个操作数是 NaN 时。每个 NaN 都应与包括其自身在内的所有内容进行无序比较。 编辑:看起来我被一条带有更详细链接的评论打败了大约 2 小时——请参阅 Joe Kington 对这个问题的评论。
猜你喜欢
  • 2021-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-26
  • 2021-09-16
  • 2012-06-26
  • 1970-01-01
相关资源
最近更新 更多