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

Stéfan van der Walt stefan at sun.ac.za
Mon Mar 24 20:54:47 EDT 2008


Hi Joris

Also take a look at the work done by Neal Becker, and posted on this
list earlier this year or end of last.  Please go ahead and create a
cookbook entry on the wiki -- that way we have a central plce for
writing up further explorations of this kind (also, let us know on the
list if you do).

Thanks!
Stéfan

On Thu, Mar 20, 2008 at 1:46 PM, Joris De Ridder
<Joris.DeRidder at ster.kuleuven.be> wrote:
>
>
> 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



More information about the NumPy-Discussion mailing list