np.isnan()== False,但是np.isnan()不是False

时间:2017-02-16 14:49:31

标签: python numpy boolean python-3.5

据我了解,==检查值的相等性,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作为值,但不是身份。为什么会这样?

2 个答案:

答案 0 :(得分:8)

numpy.isnan()会返回兼容的类型对象:

>>> import numpy
>>> type(numpy.isnan(0))
<class 'numpy.bool_'>

这是一个自定义布尔值,可以有效地存储在numpy数组中,请参阅Numpy's Data Types documentationnumpy.isnan()函数也可以对数组进行操作,生成另一个包含结果的数组:

>>> numpy.isnan(numpy.array([1, 2]))
array([False, False], dtype=bool)

同样dtype是Numpy布尔对象。

Python不保证布尔操作必须始终返回单例布尔值。您永远不应该测试is Trueis 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
>>>