我希望使用ctypes从python调用C函数。从文档中,我不明白如何传递指向向量的指针。我要调用的函数是:
我假设x是一个numpy数组,但我不确定numpy数组在内存中的组织方式是否是最佳解决方案。
编辑:
所有提出的方法都不能处理我的numpy数组,可能是由于我定义数组的方式不同。
double f(int n, double* x)
{
int i;
double p=1;
for (i=0; i< n; i ++)
p = p * x[i];
return p;
}
我已经使用了空指针修改了这个函数,所以它变成了f(int, void*)
,并且进行了内部转换为double类型。我执行以下操作:
def f(x):
n = len(x)
libc = '/path/to/lib.so'
cn = c_int(n)
px = pointer(x)
cx = c_void_p(px)
libc.restype = c_double
L = libc.f(cn, cx)
return L
我假设x是一个numpy数组,但我不确定numpy数组在内存中的组织方式是否是最佳解决方案。
编辑:
所有提出的方法都不能处理我的numpy数组,可能是由于我定义数组的方式不同。
x = np.array([], 'float64')
f = open(file,'r')
for line in f:
x = np.append(x,float(line))
但是有些函数只能接受显式列表,比如[1,2,3,4,5]
,而不能接受已经在其他地方定义并被引用为x
的列表。