[Numpy-discussion] C++ class encapsulating ctypes-numpy array?

Joris De Ridder Joris.DeRidder@ster.kuleuven...
Thu Mar 20 07:46:17 CDT 2008


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






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 <Joris.DeRidder@ster.kuleuven.be>:
> 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
> Numpy-discussion@scipy.org
> 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
> Numpy-discussion@scipy.org
> http://projects.scipy.org/mailman/listinfo/numpy-discussion



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

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20080320/9e692729/attachment-0002.html 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: ndarray.h
Type: application/octet-stream
Size: 3697 bytes
Desc: not available
Url : http://projects.scipy.org/pipermail/numpy-discussion/attachments/20080320/9e692729/attachment-0001.obj 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://projects.scipy.org/pipermail/numpy-discussion/attachments/20080320/9e692729/attachment-0003.html 


More information about the Numpy-discussion mailing list