[C++-sig] boost-python interface numarray to c++

Philip Austin paustin at eos.ubc.ca
Fri Jun 20 19:03:46 CEST 2003


Neal D. Becker writes:
 > On Thursday 19 June 2003 04:22 pm, Philip Austin wrote:
 > > Neal D. Becker writes:
 > >  > It would probably be useful also to create arrays in python.  Is it
 > >  > difficult to interface a python Numeric and/or numarray array to c++
 > >  > stl-style iterator interface?
 > >
 > > See http://www.boost.org/libs/python/doc/v2/numeric.html#array-spec
 > >
 > 
 > Thanks for the pointer.  Sorry for my slowness, but I'm afraid that it wasn't 
 > obvious to me what to do to get stl-style iterators.  Could you suggest 
 > something or maybe a small example?  Thanks.

Well, I'm not exactly sure what you mean by "get stl-style iterators"
but if you want to pass a  Numpy array to C++ and
construct an array that supports iterators (like boost::ublas or
mtl) using its data pointer, then our approach looks something like this:

a C++ histogram module, on the python side:

import hist
outDict=hist.hist(theArray,numbins,themin,themax)

on the C++ side:

using namespace boost::python;
namespace nbpl = num_util;

  dict histo::hist(numeric::array x, int numbins, 
		       float mindata, float maxdata)
  {
    nbpl::check_rank(x, 1);
    nbpl::check_type(x, PyArray_FLOAT);
    float* dataPtr = (float*) nbpl::data(x);

    ....
        
    both mtl and ublas have constructors that will make an
    array from dataPtr, and let Python manage
    the memory.


Regards, Phil    














More information about the Cplusplus-sig mailing list