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

Matthieu Brucher matthieu.brucher at gmail.com
Thu Mar 20 09:42:18 EDT 2008


2008/3/20, Joris De Ridder <Joris.DeRidder at ster.kuleuven.be>:
>
>
> 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
>

You can use ctypes if and ony if the C++ object is only used in one function
call. You can't for instance create a C++ container with ctypes, then in
Python call some method and then delete the container, because ctypes will
destroy the data after the C++ container was built. This is the only
drawback of ctypes.

When it comes to strides, you have to divide them by the size of your data :
the stride is counted in bytes and not in short/float/...

Matthieu
-- 
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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20080320/33190ff3/attachment.html>


More information about the NumPy-Discussion mailing list