2011-11-20 7 views
9

Estoy buscando una forma de verificar los valores de NaN en el código de Cython. Por el momento, estoy usando:Comprobación de nan en Cython

if value != value: 
    # value is NaN 
else: 
    # value is not NaN 

¿Hay una mejor manera de hacerlo? ¿Es posible usar una función como Numpy's isnan?

+0

Hay 'math.isnan'. No estoy familiarizado con Cython; ¿Puedes usar un módulo incorporado? –

+1

(Parece que sí, así que he respondido). –

Respuesta

5

Si desea asegurarse de que el código también funciona en Windows se debe utilizar mejor

cdef extern from "numpy/npy_math.h": 
    bint npy_isnan(double x) 

porque en Windows, por lo que sé, isnan se llama _isnan y se define en float.h

Vea también aquí por ejemplo: https://github.com/astropy/astropy/pull/186

Si no desea introducir numpy también se puede insertar estas directivas precompilador en el archivo .c Cython genera:

#if defined(WIN32) || defined(MS_WINDOWS) 
#define USEMATH_DEFINES 
#define isnan(x) _isnan(x) 
#endif