I want to call a c function from python using ctypes. From the documentation I don\'t understand how to pass pointer to vectors. The function I want to call is:
You can call it like this:
#!python
from ctypes import *
#!python
from ctypes import *
# double f(int n, double* x)
f = CDLL('/path/to/lib.so').f
f.argtypes = [c_int, POINTER(c_double)]
f.restype = c_double
if __name__ == '__main__':
array = (c_double * 5)(1, 2, 3, 4, 5)
r = f(len(array), array)
print(r)
If you have numpy array, you can use numpy.array.ctypes.data_as
:
#!python
from ctypes import *
import numpy
# double f(int n, double* x)
f = CDLL('/path/to/lib.so').f
f.argtypes = [c_int, POINTER(c_double)]
f.restype = c_double
if __name__ == '__main__':
array = numpy.array([1, 2, 3, 4, 5])
r = f(array.size, array.astype(numpy.double).ctypes.data_as(POINTER(c_double)))
print(r)
or:
#!python
from ctypes import *
import numpy
# double f(int n, double* x)
f = CDLL('/path/to/lib.so').f
f.argtypes = [c_int, POINTER(c_double)]
f.restype = c_double
if __name__ == '__main__':
array = numpy.double([1, 2, 3, 4, 5])
r = f(array.size, array.ctypes.data_as(POINTER(c_double)))
print(r)