On Aug 14, 2012 4:25 AM, "shahmi" <alfarobi0...@yahoo.com> wrote: > > Hi, > > I have tried to access/expose 2D array from python in C++ using boost::multi_array. Nevertheless, it seems that the boost::multi_array<double, 2> datatype is not supported. Is there any way to resolve this? My way of accessing it as below: > > boost::python::object Vp = main_namespace["Vp"]; > Vp_cpp = boost::python::extract<boost::multi_array<double, 2> >(Vp); > > I've also tried to try to use 2D vector as below, nonetheless, it still doesn't work: > > boost::python::object Vp = main_namespace["Vp"]; > Vp_cpp = boost::python::extract<std::vector<std::vector<double> > >(Vp); > > The error message I received is "TypeError: No registered converter was able to produce a C++ rvalue of type std::vector<std::vector<double, std::allocator<double> >, std::allocator<std::vector<double, std::allocator<double> > > > from this Python object of type matrix" >
In general Boost.Python doesn't provide converters for all the other boost libraries. The first question is what you want to return in Python; you could wrap multi_array itself using class_. You could also return a nested list or tuple. If you want to use numpy, you'll probably want a helper library like this one: https://github.com/ndarray/Boost.NumPy In either of the last two cases, you can either write your own converter and add it to the converter registry (harder, but reusable), or write a custom wrapper for the function that returns a 2-d array (easier, but not good if you have many such functions). HTH Jim
_______________________________________________ Cplusplus-sig mailing list Cplusplus-sig@python.org http://mail.python.org/mailman/listinfo/cplusplus-sig