Aufruf von c aus Python mit ctypes: Vektoren übergeben
Ich möchte eine c-Funktion von Python mit ctypes aufrufen. Von demDokumentation Ich verstehe nicht, wie man Zeiger auf Vektoren übergibt. Die Funktion, die ich aufrufen möchte, ist:
double f(int n, double* x)
{
int i;
double p=1;
for (i=0; i< n; i ++)
p = p * x[i];
return p;
}
Ich habe die funktion mit void pointer modifiziert, so wird esf(int, void*)
mit einer internen Besetzung zu verdoppeln. Ich mache folgendes:
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
Ich gehe davon aus, dass x ein Numpy-Array ist, bin mir aber nicht sicher, wie die Numpy-Arrays im Speicher organisiert sind und ob dies die beste Lösung ist.
Bearbeiten:
Keine der vorgeschlagenen Methoden funktioniert mit meinem Numpy-Array. Vielleicht liegt es daran, wie ich das Array definiere:
x = np.array([], 'float64')
f = open(file,'r')
for line in f:
x = np.append(x,float(line))
aber einige von ihnen funktionieren, wenn ich eine explizite Liste mag[1,2,3,4,5]
statt einer Liste, die an einer anderen Stelle definiert wurde und als bezeichnet wirdx