我正在尋找一種方法來檢查Cython代碼中的NaN值。目前,我正在使用:在Cython中檢查nan
if value != value:
# value is NaN
else:
# value is not NaN
有沒有更好的方法來做到這一點?是否可以使用像Numpy的isnan
這樣的功能?
我正在尋找一種方法來檢查Cython代碼中的NaN值。目前,我正在使用:在Cython中檢查nan
if value != value:
# value is NaN
else:
# value is not NaN
有沒有更好的方法來做到這一點?是否可以使用像Numpy的isnan
這樣的功能?
從http://groups.google.com/group/cython-users/msg/1315dd0606389416兩者,你可以這樣做:
cdef extern from "math.h":
bint isnan(double x)
然後,你可以使用isnan(value)
。
在用Cython的新版本,它更容易:
from libc.math cimport isnan
如果你想確保你的代碼也可以運行在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
有'math.isnan'。我不熟悉Cython;你可以使用這樣的內置模塊嗎? –
(看來你可以,所以我已經做出了答案。) –