美文网首页
恼人的NaN (Not a Number)

恼人的NaN (Not a Number)

作者: SunshineDrizzle | 来源:发表于2019-03-02 17:36 被阅读0次

简介

  NaN的全称是Not a Number,意思是“不是一个数字”,它用于代表那些未定义或是不可表征的值。比如在数值运算时遇到分母为0的情况,其结果往往会用NaN来代替。下面我主要针对Python中的NaN的性质进行探讨。

创建NaN

  虽然不是一个数,但NaN属于浮点数类型。

>>> import math
>>> import numpy as np
>>> math_nan = math.nan
>>> np_nan = np.nan
>>> float_nan = float('nan')
>>> isinstance(math_nan, float) and isinstance(np_nan, float) and isinstance(float_nan, float)
>>> True

  这里介绍了三种方法,其中前两种其实只是分别对两个库各自预先定义的NaN进行引用,第三种方法会创建新的NaN(开辟新的内存空间)。

>>> math_nan is math_nan and np_nan is np.nan
>>> True
>>> math_nan is np_nan or float_nan is float('nan')
>>> False

检测NaN

  由于NaN是未被定义的值,所以它无所谓大小或是相等。

>>> math_nan==math_nan or np_nan>np_nan or float_nan<float_nan
>>> False
>>> math_nan!=math_nan and np_nan!=np_nan and float_nan!=float_nan
>>> True

  所以要想用关系运算来检测NaN,需要通过自身不等于自身这一点来实现。当然用python库自带的检测会更好理解以及让人放心。

>>> math.isnan(math_nan) and math.isnan(np_nan) and math.isnan(float_nan)
>>> True
>>> np.isnan(math_nan) and np.isnan(np_nan) and np.isnan(float_nan)
>>> True

应对NaN

  NaN的存在有时会影响计算,除了一开始避免产生NaN,对于一些无法避免的,我们首先就是要能检测到它,然后根据我们的需求做出相应处理。比如在求平均的时候忽略NaN,或是把NaN转化成不影响后续步骤的值。

>>> np.mean([1, np_nan, 3])
>>> nan
>>> np.nanmean([1, np_nan, 3])
>>> 2.0
>>> np.nan_to_num(np_nan)
>>> 0.0

参考资料

  1. https://en.wikipedia.org/wiki/NaN
  2. https://riptutorial.com/python/example/3973/infinity-and-nan---not-a-number--

相关文章

  • 恼人的NaN (Not a Number)

    简介   NaN的全称是Not a Number,意思是“不是一个数字”,它用于代表那些未定义或是不可表征的值。比...

  • Number数据类型以及常用的方法

    Number数据类型 NaN --》not a number任何关于NaN的操作返回的都是NaN如:NaN+1--...

  • 2018-06-26 (NaN)

    NaN NaN (not a Number) 不是 一个 数字 。 NaN (not a N...

  • js中NaN的判断

    1.NaN是什么? NaN全称是Not-A-Number(不是一个数字)。 我们可以通过Number.NaN来获得...

  • NaN (not a number)

    这是被除数为0造成的

  • js学习笔记

    js数据类型 Number 1.包括:-1,0,1,0.111,NaN2.NaN:(Not a Number)可以...

  • NaN

    NaN NaN:not a number 不是个 数字 的 数字类型 转化成数字失败就会变成NaN NaN的特性 ...

  • 原生javascript的知识点(一)

    NaN: NaN这个特殊的Number与所有其他值都不相等,包括它自己NaN === NaN; // false唯...

  • JavaScript基础学习(三)-number类型

    number数字类型 包含:常规数字、NaN NaN not a number: 不是一个数,但它属于数字类型Na...

  • JavaScript学习Day2

    关于常见数据结构: 需要说明的:在number 中特殊的 NaN (Not a number)非数返回NaN的运算...

网友评论

      本文标题:恼人的NaN (Not a Number)

      本文链接:https://www.haomeiwen.com/subject/lpmeuqtx.html