让人头疼的 nan 类型

之前研究过判断 nan 类型的方法: http://support.i-search.com.cn/article/1542880498568

今天在处理数据的时候碰到了一些问题,因此再次研究一下 nan 类型。

首先初始化一个集合,然后加入 5 个 nan 元素:
让人头疼的 nan 类型

然后我们打印一下这个集合看看,由于集合的去重机制,正常应该是只有一个 nan:
让人头疼的 nan 类型

居然有五个!难道里面每个都互不相同吗?
我们再进一步判断:
让人头疼的 nan 类型
让人头疼的 nan 类型
让人头疼的 nan 类型

nan 这个东西在内存中的地址也是像量子力学那样飘忽不定的:
让人头疼的 nan 类型

询问度娘后,发现 nan 跟任何值都是不等的,也包括它自身
另外,python 中也可以这么定义一个 nan 类型:

b = float('nan')

或者

from decimal import Decimal
b = Decimal('nan')

这里变量 a 和变量 b 虽然都叫 nan,但类型不一样
让人头疼的 nan 类型

总结一下:NaN, Not a Number, 非数. 它即不是无穷大, 也不是无穷小, 而是 python/numpy/… 觉得无法计算时返回的一个符号