可以通过Python脚本将一个cdef
Cython函数传递给另一个(python def
)cython函数吗?通过python接口传递cython函数
小例子:
test_module.pyx
cpdef min_arg(f, int N):
cdef double x = 100000.
cdef int best_i = -1
for i in range(N):
if f(i) < x:
x = f(i)
best_i = i
return best_i
def py_f(x):
return (x-5)**2
cdef public api double cy_f(double x):
return (x-5)**2
test.py
import pyximport; pyximport.install()
import testmodule
testmodule.min_arg(testmodule.py_f, 100)
这工作不错,但我希望能够也做
testmodule.min_arg(testmodule.cy_f, 100)
从一个test.py,具有cython的速度(每个f(i)
调用没有Python开销)。但显然,Python不知道cy_f,因为它不是def
或cpdef
宣布。
我希望这样的事情存在:
from scipy import LowLevelCallable
cy_f = LowLevelCallable.from_cython(testmodule, 'cy_f')
testmodule.min_arg(cy_f, 100)
但是这给TypeError: 'LowLevelCallable' object is not callable
。
预先感谢您。