据我了解,==
检查值的相等性,is
检查值后面的结构的身份(例如,在某些其他语言中为===
)。< / p>
鉴于此,我不理解以下内容:
np.isnan(30) == False
Out[19]:
True
np.isnan(30) is False
Out[20]:
False
其他身份检查似乎并非如此:
(5 == 4) == False
Out[22]:
True
(5 == 4) is False
Out[23]:
True
好像np.isnan()
返回False
作为值,但不是身份。为什么会这样?
答案 0 :(得分:8)
numpy.isnan()
会返回兼容的类型对象:
>>> import numpy
>>> type(numpy.isnan(0))
<class 'numpy.bool_'>
这是一个自定义布尔值,可以有效地存储在numpy数组中,请参阅Numpy's Data Types documentation。 numpy.isnan()
函数也可以对数组进行操作,生成另一个包含结果的数组:
>>> numpy.isnan(numpy.array([1, 2]))
array([False, False], dtype=bool)
同样dtype
是Numpy布尔对象。
Python不保证布尔操作必须始终返回单例布尔值。您永远不应该测试is True
或is False
。在布尔运算中直接使用numpy.isnan()
输出,使用not
来测试错误值:
if numpy.isnan(foo):
和
if not numpy.isnan(bar):
答案 1 :(得分:2)
np.isnan(30)
return
s np.False_
与False
具有不同的身份;不过不要依赖这个。
>>> import numpy as np
>>> np.isnan(30) is np.False_
True
>>> np.False_ is False
False
>>>