用Cython包装C函数,生成NaN

2024-05-13 02:59:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我在C代码中有一个返回double的函数。 为了制作一个可复制的例子,我将通过以下方式对其进行极度简化。在.c文件中:

double myfunction_at_k_and_z(struct background * pba,
                          struct spectra * psp,
                          struct perturbs *ppt,
                          double k,
                          double z,
                          double * pk_ic) 
{ 
double result = 3.;

return result;}

.h文件中:

^{pr2}$

一切都很好,输出result就是我期望的输出,我可以在函数内使用fprintf在屏幕上打印result的值,看起来不错。在

现在我想用Python包装器包装这个函数,使用Cython。在.pyx文件中,我在一个类myclass中创建了这个函数:

def get_myfunction_at_k_and_z(self, double k, double z):
        cdef double dummy
        cdef double result = myfunction_at_k_and_z(&self.ba, &self.sp, &self.pt, k, z, &dummy)
        return result

.pxd文件中,我声明:

double myfunction_at_k_and_z (background * pba, spectra * psp, perturbs *ppt, double k, double z, double * pk_ic)

以便包装器知道C中的原始函数。这编译得很好,但是如果现在我从Python调用myfunction_at_k_and_z,在值,例如k = 0.1, z = 1.via

myclass.get_myfunction_at_k_and_z(0.1,1.)

此函数将打印nan!!! 这很奇怪,为什么它在C中工作而在Python中不起作用?在


Tags: and文件函数selfresultstructatbackground