我正在努力在我的cython
代码中使用指针的概念。以下示例是我尝试执行的简化版本。我有一个函数func
,我想在函数(分布函数)中作为输入参数提供。该分布有两个指针向量作为输入变量。
from cpython cimport array
import cython
import ctypes
cimport numpy as np
ctypedef void (*myFuncDef)(double *, double *)
from cython.parallel import prange
cdef void func(int* x, double* hx, void(*func)(double*, double*), int n):
def int i
for i from 0 <= i < n:
func[0](&x[i], &hx[i])
return
cpdef void Lognormal(double* u,
double* yu):
#evaluate log of normal distribution
yu=-u*u*0.5
return
def foo(np.ndarray[ndim=1, dtype=np.float64_t] x,
np.ndarray[ndim=1, dtype=np.float64_t] hx,
myFuncDef distribution, int k):
cdef np.ndarray[ndim=1, dtype=np.float64_t] sp
cdef int num=len(x)
cdef int j
for j from 0 <= j <k:
func(&x[0],&hx[0],&distribution, num)
sp[j]=hx[0]
return sp
所以我想使用Lognormal
函数作为foo
函数的输入。我收到以下错误消息:
Cannot assign type 'myFuncDef *' to 'void (*)(double *, double *)'
如果有任何建议可以修复此错误,我将不胜感激。
答案 0 :(得分:2)
你有一个太多的指针层(提出标准问题反对typedef
s指针)。只需从&
删除&distribution
;它已经是你想要的功能指针了。