我有很多C函数,我想从python中调用它们.cython似乎是要走的路,但我无法真正找到一个如何做到这一点的例子.我的C函数看起来像这样:
void calculate_daily ( char *db_name, int grid_id, int year,
double *dtmp, double *dtmn, double *dtmx,
double *dprec, double *ddtr, double *dayl,
double *dpet, double *dpar ) ;
Run Code Online (Sandbox Code Playgroud)
我想要做的就是指定前三个参数(一个字符串和两个整数),并恢复8个numpy数组(或python列表.所有双数组都有N个元素).我的代码假设指针指向已经分配的内存块.此外,生成的C代码应该链接到一些外部库.
我有以下功能:
def get_denom(n_comp,qs,x,cp,cs):
'''
len(n_comp) = 1 # number of proteins
len(cp) = n_comp # protein concentration
len(qp) = n_comp # protein capacity
len(x) = 3*n_comp + 1 # fit parameters
len(cs) = 1
'''
k = x[0:n_comp]
sigma = x[n_comp:2*n_comp]
z = x[2*n_comp:3*n_comp]
a = (sigma + z)*( k*(qs/cs)**(z-1) )*cp
denom = np.sum(a) + cs
return denom
Run Code Online (Sandbox Code Playgroud)
我将它与Fortran实现(我的第一个Fortran函数)进行比较:
subroutine get_denom (qs,x,cp,cs,n_comp,denom)
! Calculates the denominator in the SMA model (Brooks and Cramer 1992)
! The function is called at …Run Code Online (Sandbox Code Playgroud)