Richard Shaw wrote: > Hello, > > Forgive me if this is a stupid question, I've been looking around all > the Cython documentation and I can't find out if this is possible. > > What I would like to do is generally is wrap a C function that takes a > double array, and be able to pass in a numpy array, I was wondering if > it's possible to do this using the buffer interface? I understand I > could do it using this method (http://wiki.cython.org/WrappingNumpy), > but the buffer interface seems much neater. > > Specifically, I have a C function that I would like to wrap with signature: > > #### cfile.h > double do_something(double * array, int len); > > I was hoping with the buffer interface, I could do something like this: > > #### pyfile.pyx > import numpy > cimport numpy > > cdef extern from "cfile.h" > double do_something(double * array, int len) > > cdef do_something_python(numpy.ndarray[numpy.float64, ndim = 1] numarr): > cdef double x > cdef double * data > cdef int l > > data = ... # Not sure what to do here > l = numarr.shape[0] > > x = do_something(data, l)
I'm sorry, my previous answer was a really, really bad one. Here's a better one: data = <double*>numarr.data :-) With the addition of the _t on float64 this should just work. Please insert an extra check to make sure that your data is contiguous though! Otherwise you need to make a copy to pass the data to an external lib (one way is by using numpy.array with a contiguouos argument to construct a copy, and then copy the data back again afterwards). -- Dag Sverre _______________________________________________ Numpy-discussion mailing list Numpy-discussion@scipy.org http://projects.scipy.org/mailman/listinfo/numpy-discussion