[Numpy-discussion] C++ class encapsulating ctypes-numpy array?
Stéfan van der Walt
Mon Mar 24 19:54:47 CDT 2008
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).
On Thu, Mar 20, 2008 at 1:46 PM, Joris De Ridder
> 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)
> 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 + j * strides + k * strides 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.
More information about the Numpy-discussion