我需要cython化一个函数,它接受参数lenscale和sigvar以构造一个函数。我希望能够做到这一点,而不必让k_se成为一个类。当我运行以下代码时:
ctypedef float (*kfunc)(float, float)
cdef kfunc k_se(float lenscale, float sigvar):
cdef float f(float xi, float xj):
return sigvar**2. * _np.exp(-(1./(2. * lenscale**2.)) *\
_npl.norm(xi - xj)**2)
return f
我收到错误:
Error compiling Cython file:
------------------------------------------------------------
...
cdef kfunc k_se(float lenscale, float sigvar):
cdef float f(float xi, float xj):
^
------------------------------------------------------------
BUILDGP.pyx:15:36: C function definition not allowed here
我也试过这个尝试返回一个lambda,cython也无法编译。任何想法,我是否必须为k_se函数创建一个构造函数类?
答案 0 :(得分:2)
您可以构造一个类,可以使用一组参数进行初始化并充当可调用的类:
class Function():
def __init__(self, float lenscale):
self.lenscale = lenscale
def __call__(self, float xi):
return self.lenscale*xi
f = Function(10)
print f(5)