【问题标题】:invalid value in "less" when comparing np.nan in an array比较数组中的 np.nan 时,“less”中的值无效
【发布时间】:2023-04-04 13:13:01
【问题描述】:

观察

np.nan < 0

False

np.array([np.nan]) < 0

array([False], dtype=bool)

然而

np.array([-1, np.nan]) < 0
//anaconda/envs/3.5/lib/python3.5/site-packages/ipykernel/__main__.py:1: RuntimeWarning: invalid value encountered in less
  if \__name\__ == '\__main\__':
array([ True, False], dtype=bool)

这个错误是什么意思?

【问题讨论】:

  • 再次尝试运行这些测试。 `less if name == 'main':` 看起来更像是语法错误,而不是真正的 numpy 问题。确保错误是可重现的。
  • @hpaulj 当我回到电脑上时我会重新发布。我测试了很多次。一定是某物的一个版本。我将包含该信息或打开一个问题。
  • @hpaulj 这只是格式化问题,将复制粘贴到 SO 时弄乱了。 if __name__ = "__main__" 部分来自 ipython 报告警告的方式(np.less 在单独的行上)。

标签: python pandas numpy


【解决方案1】:

这只是一个警告,而不是例外。 Numpy 试图提供帮助并报告您的数组中有一个nan。忽略它是安全的。如果警告本身困扰您(或您的用户),您可以取消它:

with np.errstate(invalid='ignore'):
    np.less([np.nan, 0], 1)

但是,确实不建议这样做,因为如果您需要在冗长的计算中找到 nan 的来源,它会掩盖不太明显的问题并使调试变得更加困难。

注意nan 的语义:nan &gt; 0nan &lt; 0nan &lt; nannan == nan 都是False

另请注意,在 numpy 中(与 pandas 不同)nan 真正意味着 无效 而不是 不可用

【讨论】:

  • nan = 不是数字
猜你喜欢
  • 2017-07-12
  • 2019-08-09
  • 2016-06-06
  • 2015-07-10
  • 2017-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多