wie kann man numpy.array von boost::python zurückgeben?

wie kann man numpy.array von boost::python zurückgeben?


Ich möchte einige Daten aus C++-Code als numpy.array zurückgeben Objekt. Ich habe mir boost::python::numeric angesehen , aber seine Dokumentation ist sehr knapp. Kann ich ein Beispiel für z. Rückgabe eines (nicht sehr großen) vector<double> zu Python? Es macht mir nichts aus, Daten zu kopieren.


Antworten:


AKTUALISIERUNG: Die in meiner ursprünglichen Antwort (https://github.com/ndarray/Boost.NumPy) beschriebene Bibliothek wurde ab Boost 1.63 direkt in Boost.Python integriert, und daher ist die Standalone-Version jetzt veraltet. Der folgende Text entspricht nun der neuen, integrierten Version (nur der Namensraum hat sich geändert).


Boost.Python enthält jetzt einen einigermaßen vollständigen Wrapper der NumPy C-API in einer Boost.Python-Schnittstelle. Es ist ziemlich niedrig und konzentriert sich hauptsächlich darauf, wie man das schwierigere Problem angeht, wie man C++-Daten ohne Kopieren an und von NumPy weitergibt, aber so würde man eine kopierte std::vector-Rückgabe damit machen:


#include "boost/python/numpy.hpp"
namespace bp = boost::python;
namespace bn = boost::python::numpy;
std::vector<double> myfunc(...);
bn::ndarray mywrapper(...) {
std::vector<double> v = myfunc(...);
Py_intptr_t shape[1] = { v.size() };
bn::ndarray result = bn::zeros(1, shape, bn::dtype::get_builtin<double>());
std::copy(v.begin(), v.end(), reinterpret_cast<double*>(result.get_data()));
return result;
}
BOOST_PYTHON_MODULE(example) {
bn::initialize();
bp::def("myfunc", mywrapper);
}

Einige Code-Antworten


…t operate on C arrays into functions that operate on NumPy arrays (#6).

No