[Numpy-discussion] Best way to expose std::vector to be used with numpy

Daniele Nicolodi daniele at grinta.net
Tue Oct 14 06:19:03 EDT 2014

On 14/10/14 04:39, Charles R Harris wrote:
> On Mon, Oct 13, 2014 at 12:54 PM, Sebastian Berg
> <sebastian at sipsolutions.net <mailto:sebastian at sipsolutions.net>> wrote:
>     On Mo, 2014-10-13 at 13:35 +0200, Daniele Nicolodi wrote:
>     > Hello,
>     >
>     > I have a C++ application that collects float, int or complex data in a
>     > possibly quite large std::vector. The application has some SWIG
>     > generated python wrappers that expose this vector to python. However,
>     > the standard way in which SWIG exposes the data is to create a touple
>     > and pass this to python, where it is very often converted to a numpy
>     > array for processing. Of course this is not efficient.
>     >
>     > I would like therefore to generate a smarter python interface. In python
>     > 3 I would without doubt go for implementing the buffer protocol, which
>     > enables seamless interfacing with numpy. However, I need to support also
>     > python 2 and there the buffer protocol is not as nice.
>     Isn't the new buffer protocol in python 2.6 or 2.7 already? There is at
>     least a memoryview object in python 2, which maybe could be used to the
>     same effect?
> No memoryview in python2.6, but the older buffer protocol it there. Is
> Boost Python an option?

The old buffer protocol is an option, but it is much less nice than the
new one, as it requires to use numpy.frombuffer() with an exlicit dtype
instead of the siumpler numpy.asarray() sufficient in python 3.

Boost Python may be an option as the codebase already depends on Boost,
but probably not yet on Boost Python. Can you point me to the relevant
documentation, and maybe to an example? One of the problems I have is
that the current wrapping is done auto-magically with SWIG and I would
like to deviate the less possible from that patter.

Thank you!


More information about the NumPy-Discussion mailing list