我正在寻找一种方法来检查Cython代码中的NaN值.目前,我正在使用:
if value != value:
# value is NaN
else:
# value is not NaN
Run Code Online (Sandbox Code Playgroud)
有一个更好的方法吗?是否可以使用像Numpy这样的功能isnan?
Chr*_*gan 21
摘自http://groups.google.com/group/cython-users/msg/1315dd0606389416,您可以这样做:
cdef extern from "math.h":
bint isnan(double x)
Run Code Online (Sandbox Code Playgroud)
然后你可以使用isnan(value).
在较新版本的Cython中,它更容易:
from libc.math cimport isnan
Run Code Online (Sandbox Code Playgroud)
如果您想确保您的代码也可以在Windows上运行,那么最好使用它
cdef extern from "numpy/npy_math.h":
bint npy_isnan(double x)
Run Code Online (Sandbox Code Playgroud)
因为在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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2658 次 |
| 最近记录: |