gpt4 book ai didi

python - 如何在 Cython 中返回一个函数?

转载 作者:太空狗 更新时间:2023-10-30 01:22:10 26 4
gpt4 key购买 nike

我需要对一个接受参数 lenscale 和 sigvar 的函数进行 cythonize 处理,以便构建一个函数。我希望能够做到这一点而不必让 k_se 成为一个类(class)。当我运行以下代码时:

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 函数创建一个构造函数类?

最佳答案

你可以构造一个类,它可以用一组参数初始化并充当可调用的:

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)

The cython documentation has more details on this.

关于python - 如何在 Cython 中返回一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25495503/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com