我需要将一个 numpy 数组从 C++ 传递给一个 python 函数。代码如下。蟒蛇方面:
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++ 方面:
#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++ 代码应该做的是将一个 python functopn 和一个 numpy 数组作为两个参数,然后将 numpy 数组传递给 python 函数。我得到的错误是:
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
为什么?我是否必须在解释器的递归调用期间注册模块,如果是,如何注册?