вызов 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

Ответы на вопрос(3)

Ваш ответ на вопрос