np.isnan () == Falso, pero np.isnan () no es Falso

Por lo que yo entiendo, == comprueba la igualdad de valor y is identidad de la estructura detrás del valor (como, por ejemplo, === en otros idiomas).

Dado eso, no entiendo lo siguiente:

 np.isnan(30) == False Out[19]: True np.isnan(30) is False Out[20]: False 

Parece que no es el caso con otras verificaciones de identidad:

 (5 == 4) == False Out[22]: True (5 == 4) is False Out[23]: True 

Aparece como si np.isnan() devuelve False como valor, pero no como identidad. ¿Por qué es ese el caso?

numpy.isnan() devuelve un objeto de tipo compatible :

 >>> import numpy >>> type(numpy.isnan(0))  

Este es un booleano personalizado que se puede almacenar de manera eficiente en matrices numpy, consulte la documentación de tipos de datos de Numpy . La función numpy.isnan() también puede operar en arreglos, produciendo otro arreglo con resultados:

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

donde de nuevo el dtype es el objeto booleano Numpy.

Python no garantiza que las operaciones booleanas siempre deben devolver un valor booleano singleton. Nunca debes probar si is True o is False todos modos . Use la salida numpy.isnan() directamente en operaciones booleanas, use para not probar valores falsos:

 if numpy.isnan(foo): 

y

 if not numpy.isnan(bar): 

np.isnan(30) return s np.False_ que tiene una identidad diferente de False ; aunque no confíes en esto.

 >>> import numpy as np >>> np.isnan(30) is np.False_ True >>> np.False_ is False False >>>