我正在尝试学习使用 cffi,但我对 c 还很陌生,所以它有点棘手。我正在练习一个简单的函数来计算双精度数组的总和。奇怪的是,我的 sum 函数没有给出正确的输出。谁能明白为什么?我是否正确处理数组?我不明白为什么我必须将 numpy 数组转换为指针。
from cffi import FFI
import numpy as np
ffi = FFI()
ffi.cdef("""
double sum(double[], int);
""")
C = ffi.verify("""
double sum(double numbers[],int num_elements){
int i, sum=0.0;
for (i=0; i<num_elements; i++)
{
sum = sum + numbers[i];
}
return(sum);
}
""")
numbers = np.random.gamma(1,1,100)
print 'numpy', sum(numbers)
numbers_p = ffi.cast('double *',numbers.ctypes.data)
sm = C.sum(numbers_p, len(numbers))
print 'cffi', sm
输出:
numpy 119.436940423
cffi 80.0