2011-11-20 16 views
9

Sto cercando un modo per verificare i valori NaN in codice Cython. Al momento, sto usando:Controllo di nan in Cython

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

C'è un modo migliore per farlo? È possibile utilizzare una funzione come NumPy's isnan?

+0

C'è 'math.isnan'. Non ho familiarità con Cython; puoi usare un modulo così integrato? –

+1

(Sembra che tu possa, quindi ho fatto una risposta.) –

risposta

5

Se si vuole fare in modo che il codice funziona anche su Windows si dovrebbe meglio utilizzare

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

perché su Windows, per quanto ne so, isnan è chiamato _isnan ed è definito in float.h

Vedere anche qui ad esempio: https://github.com/astropy/astropy/pull/186

Se non si vuole introdurre NumPy si potrebbe anche inserire queste direttive pre-compilatore nel file .c Cython genera:

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