Python中可以用如下方式表示正负无穷

>>> float('inf') # 正无穷,inf不区分大小写,float('InF')一样可以。
inf
>>> float('-inf') # 负无穷,不区分大小写。
-inf

当涉及 > 和 < 运算时, 所有数都比 -inf 大 ,所有数都比 +inf 小。

 

>>> float('nan')
nan

nan代表Not A Number(不是一个数),它并不等于0,因为nan不是一个数,所以相关计算都无法得到数字。


正无穷float('inf')

>>> float('inf') + 100
inf
>>> float('inf') - 100
inf
>>> float('inf') * 100
inf
>>> float('inf') / 100
inf
>>> float('inf') + float('inf')
inf
>>> float('inf') - float('inf')
nan
>>> float('inf') * float('inf')
inf
>>> float('inf') / float('inf')
nan
>>> 100 + float('inf')
inf
>>> 100 - float('inf')
-inf
>>> 100 * float('inf')
inf
>>> 100 / float('inf')
0.0

负无穷float('inf')

>>> float('-inf') + 100
-inf
>>> float('-inf') - 100
-inf
>>> float('-inf') * 100
-inf
>>> float('-inf') / 100
-inf
>>> float('-inf') + float('-inf')
-inf
>>> float('-inf') - float('-inf')
nan
>>> float('-inf') * float('-inf')
inf
>>> float('-inf') / float('-inf')
nan
>>> 100 + float('-inf')
-inf
>>> 100 - float('-inf')
inf
>>> 100 * float('-inf')
-inf
>>> 100 / float('-inf')
-0.0

可见,正无穷float('inf')与负无穷float('inf')运算有着异曲同工之妙。


正无穷float('inf')与负无穷float('inf')之间的运算:

>>> float('inf') + float('-inf')
nan
>>> float('inf') - float('-inf')
inf
>>> float('-inf') - float('inf')
-inf
>>> float('inf') * float('-inf')
-inf
>>> float('inf') / float('-inf')
nan
>>> float('-inf') / float('inf')
nan

NaN

所有涉及nan的操作,返回的都是nan。

>>> float('nan') + 100
nan
>>> float('nan') - 100
nan
>>> float('nan') * 100
nan
>>> float('nan') / 100
nan

 

比较操作时,返回的都是False,哪怕两个float('nan')互相比较都不相等。

>>> float('nan') > float('inf')
False
>>> float('nan') > float('-inf')
False
>>> float('nan') < float('inf')
False
>>> float('nan') < float('-inf')
False
>>> float('nan') == float('nan') # 注意
False

Python中可以用math.isinf()与math.isnan()来判断数据是否为inf或nan。

>>> import math
>>> math.isinf(float('inf'))
True
>>> math.isinf(float('-inf'))
True
>>> math.isnan(float('nan'))
True

除此之外,还有别的方法可以用来判断数据是否为inf和nan,但上述方法是最推荐的,所以其他方法不再赘述。


正负无穷与NaN的is和==判断

>>> inf = float("inf")
>>> ninf = float("-inf")
>>> nan = float("nan")
>>> inf is inf
True
>>> ninf is ninf
True
>>> nan is nan
True
>>> inf == inf
True
>>> ninf == ninf
True
>>> nan == nan
False
>>> inf is float("inf")
False
>>> ninf is float("-inf")
False
>>> nan is float("nan")
False
>>> inf == float("inf")
True
>>> ninf == float("-inf")
True
>>> nan == float("nan")
False

首先,对于正负无穷和 NaN 自身与自身用 is 操作,结果都是 True,这里好像没有什么问题;但是如果用 == 操作,结果却不一样了, NaN 这时变成了 False。如果分别用 float 重新定义一个变量来与它们再用 is 和 == 比较,结果仍然出人意料。出现这种情况的原因稍稍有些复杂,这里就不赘术了,感兴趣可以查阅相关资料。

既然我在谈论这个问题,就再忠告:不要在 Python 中试图用 is 和 == 来判断一个对象是否是正负无穷或者 NaN。乖乖的用 math 模块就OK了,否则就是引火烧身。

Python中的inf与nan的更多相关文章

  1. Python中识别DataFrame中的nan

    # 识别python中DataFrame中的nanfor i in pfsj.index: if type(pfsj.loc[i]['WZML']) == float: print('float va ...

  2. 一句python,一句R︱python中的字符串操作、中文乱码、NaN情况

    一句python,一句R︱python中的字符串操作.中文乱码.NaN情况 先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python.最好就是一句pytho ...

  3. 【转】python 历险记(四)— python 中常用的 json 操作

    [转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...

  4. python 历险记(四)— python 中常用的 json 操作

    目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编码和解码? 常用的 json 操作有哪些? json 操作需要什么库? 如何 ...

  5. Python中的矩阵、多维数组:Numpy

    Numpy 是Python中科学计算的核心库.它提供一个高性能多维数据对象,以及操作这个对象的工具.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对 ...

  6. python中的函数---函数应用

    每种编程语言中,都需要函数的参与,python同样也不例外.函数是集成的子程序,是算法实现的最小方法单位,是完成基本操作的手段的集合.编程中能够灵活应用函数,提高程序设计的简单化:实现代码应用的复用化 ...

  7. python 数字系列-无穷大与NaN

    无穷大与NaN 问题 你想创建或测试正无穷.负无穷或NaN(非数字)的浮点数. 解决方案 Python并没有特殊的语法来表示这些特殊的浮点值,但是可以使用 float() 来创建它们.比如: > ...

  8. Python中的内置函数

    2.1 Built-in Functions The Python interpreter has a number of functions built into it that are alway ...

  9. Python中pandas模块解析

    Pandas基于两种数据类型: series 与 dataframe . 1.Series 一个series是一个一维的数据类型,其中每一个元素都有一个标签.类似于Numpy中元素带标签的数组.其中, ...

随机推荐

  1. HBase 学习之路(七)——HBase过滤器详解

    一.HBase过滤器简介 Hbase提供了种类丰富的过滤器(filter)来提高数据处理的效率,用户可以通过内置或自定义的过滤器来对数据进行过滤,所有的过滤器都在服务端生效,即谓词下推(predica ...

  2. Azkaban学习之路(四)—— Azkaban Flow 2.0的使用

    一.Flow 2.0 简介 1.1 Flow 2.0 的产生 Azkaban 目前同时支持 Flow 1.0 和 Flow2.0 ,但是官方文档上更推荐使用Flow 2.0,因为Flow 1.0会在将 ...

  3. spring cloud 系列第3篇 —— ribbon 客户端负载均衡 (F版本)

    源码仓库地址:https://github.com/heibaiying/spring-samples-for-all 一.ribbon 简介 ribbon是Netfix公司开源的负载均衡组件,采用服 ...

  4. JS工具整理

    1.获取今日日期:摘抄地址:https://www.cnblogs.com/carekee/articles/1678041.html getTodayFmt('yyyy-MM-dd') getTod ...

  5. linux下svn安装

    1.环境centos6.4 2.安装svnyum -y install subversion 3.配置 建立版本库目录mkdir /www/svndata svnserve -d -r /www/sv ...

  6. CentOS 7使用Elasticsearch

    安装ElasticSearch 下载依赖 Elasticsearch依赖jdk, 在官网下载jdk压缩包, 或者直接安装. 下载压缩包, 解压tar -xzvf jdk-8u181-linux-x64 ...

  7. There is no getter for property named 'username' in 'class Model1.User'-----报错解决

    There is no getter for property named 'username' in 'class Model1.User' -----Model Model1.User'中没有名为 ...

  8. QT 资料收集 (不定期添加)

    Qt之界面实现技巧 http://blog.sina.com.cn/s/blog_a6fb6cc90101dech.html

  9. .NET开发框架(五)-IIS上部署ASP.NET Core项目教程

    系列教程:从初学者到架构师的一步步蜕变 本篇经验将和大家介绍如何在IIS上部署ASP.NET Core项目,希望对初学.NET CORE的童靴入门有所帮助! 1.打开VS,创建项目,选择ASP.NET ...

  10. 【半小时大话.net依赖注入】(一)理论基础+实战控制台程序实现AutoFac注入

    系列目录 第一章|理论基础+实战控制台程序实现AutoFac注入 第二章|AutoFac的常见使用套路 第三章|实战Asp.Net Framework Web程序实现AutoFac注入 第四章|实战A ...