Notebook
/* double_array.c */ #include <stdio.h> void cdouble(const double *indata, size_t size, double *outdata) { size_t i; for (i = 0; i < size; ++i) outdata[i] = indata[i] * 2.0; }
gcc -fPIC -shared -o double_array.so double_array.c
import numpy as np import ctypes from numpy.ctypeslib import ndpointer lib = ctypes.cdll.LoadLibrary('./double_array.so') cdouble = lib.cdouble cdouble.restype = None cdouble.argtypes = [ndpointer(ctypes.c_double), ctypes.c_size_t, ndpointer(ctypes.c_double)] indata = np.ones((10,10)) outdata = np.empty((10,10)) cdouble(indata, indata.size, outdata) print 'array originale: %s' % indata print 'nuovo array: %s' % outdata
gcc -c -DBUILD_DLL sourcename.c gcc -shared -o sourcename.dll sourcename.o