Cython无法识别Numpy类型:Sigmoid函数编译报错求助
解决Cython中'float32_t' is not a type identifier错误
你的错误是因为cnp.float32_t不是Cython中合法的类型标识符,有两种常见的解决方式:
方式一:使用Numpy的Cython类型别名
直接将cnp.float32_t替换为cnp.float32,这是Numpy在Cython中提供的对应单精度浮点类型:
import numpy as np cimport numpy as cnp cdef inline cnp.float32 _sigmoid(cnp.float32 x): return 1/(1 + np.exp(-x))
方式二:导入C标准库的stdint.h定义float32_t
如果坚持要使用float32_t类型,需要先从C的stdint.h头文件中导入该类型的定义:
import numpy as np cimport numpy as cnp cdef extern from "stdint.h": ctypedef float float32_t cdef inline float32_t _sigmoid(float32_t x): return 1/(1 + np.exp(-x))
额外优化建议
如果追求性能,建议使用C标准库的exp函数代替Numpy的np.exp,避免Python层的函数调用开销:
import numpy as np cimport numpy as cnp cdef extern from "math.h": float exp(float x) cdef inline cnp.float32 _sigmoid(cnp.float32 x): return 1.0/(1.0 + exp(-x))
内容的提问来源于stack exchange,提问作者user1209675
相关产品推荐
相关产品推荐

