Python和Numpy的nan和set

发布于 2021-01-29 18:19:20

我遇到了Python的Numpy,set和NaN(非数字)的意外行为:

>>> set([np.float64('nan'), np.float64('nan')])
set([nan, nan])
>>> set([np.float32('nan'), np.float32('nan')])
set([nan, nan])
>>> set([np.float('nan'), np.float('nan')])
set([nan, nan])
>>> set([np.nan, np.nan])
set([nan])
>>> set([float('nan'), float('nan')])
set([nan, nan])

在这里,np.nan产生单个元素集,而Numpy的nans产生一个集合中的多个nans。float(’nan’)也是如此!并注意:

>>> type(float('nan')) == type(np.nan)
True

我想知道这种差异是如何产生的,以及不同行为背后的合理性是什么。

关注者
0
被浏览
50
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    NAN的特性之一是NAN!=
    NAN,与所有其他数字不同。但是,在set尝试插入新成员之前,first的实现会先检查id(x)是否与哈希索引处的现有成员匹配。如果您有两个ID都不同的对象,它们的ID都不同,则您将在集合中获得两个条目。如果它们具有相同的ID,则它们会折叠为一个条目。

    正如其他人指出的那样,np.nan是一个始终具有相同ID的单个对象。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看