вызов c из python с помощью ctypes: передача векторов
Я хочу вызвать функцию c из Python, используя ctypes. Отдокументация Я не понимаю, как передать указатель на векторы. Функция, которую я хочу вызвать:
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*)
с внутренней отливкой в два раза. Я делаю следующее:
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 в памяти и является ли это лучшим решением.
Редактировать:
Ни один из предложенных методов не работает с моим массивом, возможно, это связано с тем, как я определяю массив:
x = np.array([], 'float64')
f = open(file,'r')
for line in f:
x = np.append(x,float(line))
но некоторые из них работают, если у меня есть явный список, как[1,2,3,4,5]
, а не список, который был определен где-то еще, и он упоминается какx