python“;是";返回True,但返回“True”==&引用;返回False
只要“is”返回True,“==”就不应该返回True吗python“;是";返回True,但返回“True”==&引用;返回False,python,numpy,comparison,Python,Numpy,Comparison,只要“is”返回True,“==”就不应该返回True吗 In [101]: np.NAN is np.nan is np.NaN Out[101]: True In [102]: np.NAN == np.nan Out[102]: False In [103]: np.NaN == np.nan Out[103]: False In [104]: np.NaN == np.NAN Out[104]: False 编辑: float的3个表达式是旧版本的遗留表达式还是有其他用法?否,
In [101]: np.NAN is np.nan is np.NaN
Out[101]: True
In [102]: np.NAN == np.nan
Out[102]: False
In [103]: np.NaN == np.nan
Out[103]: False
In [104]: np.NaN == np.NAN
Out[104]: False
编辑:
float的3个表达式是旧版本的遗留表达式还是有其他用法?否,不适用于。您已找到其中一个例外。根据NaN的理论,NaN不等于任何东西,甚至不等于它自己:
与NaN进行比较时,即使与自身进行比较,也始终会返回无序结果
不仅numpy的行为是这样的:
>>> nan = float('nan')
>>> nan is nan
True
>>> nan == nan
False
任何根据IEEE标准实现浮点运算的编程语言都将如此
多个拼写与名称的常用大写字母相匹配。它是一个非数字的缩写,不同的人对缩写的大写方式不同
对于同一个对象,is
始终将是True
,但是=
甚至不能保证返回布尔值。从:
按照惯例,将返回False
和True
以进行成功比较。但是,这些方法可以返回任何值,因此如果在布尔上下文中使用比较运算符(例如,在if
语句的条件下),Python将对该值调用bool()
,以确定结果是真还是假
浮点标准(IEEE 754)要求NaN值的任何比较结果都不相等。这对于声称实现IEEE 754的任何编程语言都是通用的,而不仅仅是Python 另见维基百科。引用 numpy中定义的特殊值:nan,inf NaNs可以用作穷人的面具(如果你不在乎 原值为(美元) 注意:不能使用相等性来测试NAN。例如: np.nan==np.nan总是假的!改用特殊的numpy函数。假的
欢迎来到IEEE 754。
NaN
无法与任何东西相比,您需要为我的所有朋友使用np.isnan
+1;)希望我能为“但是==甚至不能保证返回一个布尔值”问题+2,顺便说一句,在这种情况下,\uuuuuueq\uuuuu
建议不要返回布尔值吗?@zhangxaochen:SQLAlchemy返回查询过滤器对象,例如。Numpy也做类似的事情,IIRC。和'NaN','NaN','NaN'只是为了兼容性,对吗?它们是为了匹配任何拼写。Pythonfloat
也做同样的事情。