<p>我有一个用C编写的函数,存储在两个文件中:头文件和C文件。cython文档只提到了如何将内置的C函数引入cython,比如stdio和stdlib。我想做的是:</p>
<pre><code>from numpy import *
dir = loadtxt('cell_dirs_001.txt')
spk = loadtxt('cell_spks_001.txt')
pout = zeros(9)
cdef extern from "platemethod.h":
double platemethod(double dir, double spk, 7, double pout)
</code></pre>
<p>其中dir和spk都是5x8双精度数组。我会发布platemethod文件,但函数本身大约有200行长。让我们用一个更简单的例子。假设我有一个C函数来测试一个数的素性,那么我创建的两个文件分别称为fib.C和fib.h。这里是fib.h:</p>
^{pr2}$
<p>那里不多,可能甚至没有必要。但是大函数有一个头,所以我们假设它是必须的。以下是fib.c:</p>
<pre><code>#include <stdio.h>
#include <math.h>
#include <stdbool.h>
#include "fib.h"
void fib(int n){
int n;
int i = 2; /* Obviously 1 can divide all and 2 is the base of primality*/
while (i < n) {
if (n % i == 0){
return 0;
break;
}
else {
i = i + 1;
if (i == (n-1)){
return 1;
}
}
}
return 0;
}
</code></pre>
<p>现在让它变得有趣,假设我想浏览一个数字列表,看看它们是否是素数。在</p>
<pre><code>a = [5,12,787,2,53334,12353112,12112478]
cdef extern from "fib.h":
for n in a:
print fib(n)
</code></pre>
<p>但这不起作用。我该怎么办?在</p>