cdef
파이썬 스크립트에서 Cython 함수를 다른 파이썬 함수 (예 : def
)로 전달할 수 있습니까?파이썬 인터페이스를 통한 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 오버 헤드 없음)를 갖습니다. 그러나 분명히 파이썬은 def
이나 cpdef
을 선언하지 않았기 때문에 cy_f에 대해 알지 못합니다.
from scipy import LowLevelCallable
cy_f = LowLevelCallable.from_cython(testmodule, 'cy_f')
testmodule.min_arg(cy_f, 100)
을하지만이 TypeError: 'LowLevelCallable' object is not callable
을 제공합니다
이 같은 일이 존재 기대했다.
미리 감사드립니다.