Python中的inf与nan
python中可以用如下方式表示正负无穷
>>>float('inf')#正无穷,inf不区分大小写,float('InF')一样可以。
inf
>>>float('-inf')#负无穷,不区分大小写。
-inf
当涉及>和>>float('nan')
nan
nan代表NotANumber(不是一个数),它并不等于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('nan')>>float('nan')==float('nan')#注意
False
Python中可以用math.isinf()与math.isnan()来判断数据是否为inf或nan。
>>>importmath
>>>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")
>>>infisinf
True
>>>ninfisninf
True
>>>nanisnan
True
>>>inf==inf
True
>>>ninf==ninf
True
>>>nan==nan
False
>>>infisfloat("inf")
False
>>>ninfisfloat("-inf")
False
>>>nanisfloat("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,希望对大家有所帮助,如果想要了解更多Python相关知识,请关注IT培训机构:开发教育。
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!