Thanks Matthieu, for the interesting pointer.

My goal was to be able to use ctypes, though, to avoid having to do manual memory management. Meanwhile, I was able to code something in C++ that may be useful (see attachment). It (should) work as follows.

1) On the Python side: convert a numpy array to a ctypes-structure, and feed this to the C-function:
     arg = c_ndarray(array)
     mylib.myfunc(arg)

2) On the C++ side:  receive the numpy array in a C-structure: 
     myfunc(numpyArray<double> array)
       
3) Again on the C++ side: convert the C-structure to an Ndarray class: (e.g. for a 3D array)
     Ndarray<double,3>  a(array)

No data copying is involved in any conversion, of course.  Step 2 is required to keep ctypes happy. I can now use a[i][j][k] and the conversion from [i][j][k] to i*strides[0] + j * strides[1] + k * strides[2] is done at compile time using template metaprogramming. The price to pay is that the number of dimensions of the Ndarray has to be known at compile time (to instantiate the template), which is reasonable I think, for the gain in convenience. My first tests seem to  be satisfying.

I would really appreciate if someone could have a look at it and tell me if it can be done much better than what I cooked. If it turns out that it may interest more people, I'll put it on the scipy wiki.

Cheers,
Joris


Attachment: ndarray.h
Description: Binary data




On 19 Mar 2008, at 16:22, Matthieu Brucher wrote:
Hi,

On my blog, I spoke about the class we used. It is not derived from a Numpy array, it is implemented in terms of a Numpy array (http://matt.eifelle.com/item/5)

Matthieu

2008/3/19, Joris De Ridder <[EMAIL PROTECTED]>:
Hi,

I'm passing (possibly non-contiguous) numpy arrays (data + shape +
strides + ndim) with ctypes to my C++ function (with external "C" to
make ctypes happy). Has anyone made a C++ class derived from a ctypes-
numpy-array with an overloaded [] operator to allow easy indexing
(e.g. x[0][2][5] for a 3D array) so that you don't have to worry about
strides? I guess I'm not the first one thinking about this...

Cheers,
Joris



Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm

_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion



--
French PhD student
Website : http://matthieu-brucher.developpez.com/
Blogs : http://matt.eifelle.com and http://blog.developpez.com/?blog=92
LinkedIn : http://www.linkedin.com/in/matthieubrucher _______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion

_______________________________________________
Numpy-discussion mailing list
[email protected]
http://projects.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to