[SciPy-user] Need very simple example showing how to return numpy array from C/C++ function

Nathan Bell wnbell at gmail.com
Thu Dec 27 19:16:04 EST 2007


On Dec 27, 2007 3:20 PM, Jeremy Conlin <jeremit0 at gmail.com> wrote:
> I have a class member function that looks like this:
>
> std::vector<double> discretize(...);
>
> I would like to return a numpy array instead of a std::vector<double>.  I
> could (of course) rewrite my function to return a pointer to the first
> element of an array if needed.  I am currently using SWIG for wrapping my
> code for Python.
>
> I have searched far and wide for a simple example of how I should do this.
> Everything I find is *far* too complicated for someone doing this for the
> first time.  Does someone have a simple example they would like to share?  I
> have the "Guide to Numpy"; it has lots of information about the different
> functions, it doesn't have any examples.

I use STL vectors for ouput in scipy.sparse.  See line 517 of:
http://projects.scipy.org/scipy/scipy/browser/trunk/scipy/sparse/sparsetools/numpy.i

For a STL vector<double> named myvec this should work:

int length = myvec.size();
PyObject *obj = PyArray_FromDims(1, &length, PyArray_DOUBLE);
memcpy(PyArray_DATA(obj),&(myvec[0]),sizeof(double)*length);

If you know the size of the output in advance, then you might follow
Matthieu's suggestion since a copy is not required.

-- 
Nathan Bell wnbell at gmail.com



More information about the SciPy-User mailing list