I need to pass a numpy array to a python function from C ++. The code is below. Python side:
import numpy as np import convert as cv def f(x): x[0] = 5. return len(x) if __name__ == '__main__': y = np.array([1., 2., 3., 4.]) x = cv.func_n(f, y) print x
C ++ side:
#include <iostream> #include <boost/python.hpp> using namespace boost::python; double func_n(PyObject* f, numeric::array &x) { std::cerr << "Inside func_n\n"; return boost::python::call<double>(f, boost::ref(x)); } BOOST_PYTHON_MODULE(convert) { numeric::array::set_module_and_type("numpy", "ndarray"); def("func_n", &func_n); }
C ++ code is supposed to make python functopn and a numpy array as two arguments, and then pass the numpy array to the python function. The error I am getting is:
Traceback (most recent call last): File "mm.py", line 11, in <module> x = cv.func_n(f, y) TypeError: No Python class registered for C++ class class boost::python::numeric::array
Why? Should I register a module during a recursive invocation of the interpreter, and if so, how?
source share