我在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
文件中:
一切都很好,输出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
中不起作用?在
目前没有回答
相关问题 更多 >
编程相关推荐