2011-11-20 35 views
9

我正在尋找一種方法來檢查Cython代碼中的NaN值。目前,我正在使用:在Cython中檢查nan

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

有沒有更好的方法來做到這一點?是否可以使用像Numpy的isnan這樣的功能?

+0

有'math.isnan'。我不熟悉Cython;你可以使用這樣的內置模塊嗎? –

+1

(看來你可以,所以我已經做出了答案。) –

回答

5

如果你想確保你的代碼也可以運行在Windows,你應該更好地利用

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

,因爲在Windows上,據我所知,isnan被稱爲_isnan並在float.h中定義。

另請參閱這裏例如:https://github.com/astropy/astropy/pull/186

如果你不希望引入numpy的,你也可以插入這些預編譯器指令到.c文件用Cython產生:

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