如何从 boost::python 返回 numpy.array?

2024-03-11

我想从 C++ 代码返回一些数据作为numpy.array目的。我看了一下boost::python::numeric,但它的文档非常简洁。我可以举个例子吗返回一个(不是很大)vector<double>到蟒蛇?我不介意复制数据。


UPDATE:我原来的答案中描述的图书馆(https://github.com/ndarray/Boost.NumPy https://github.com/ndarray/Boost.NumPy)从 Boost 1.63 开始已直接集成到 Boost.Python 中,因此独立版本现已弃用。下面的文本现在对应于新的集成版本(仅名称空间发生了变化)。

Boost.Python 现在将 NumPy C-API 的相当完整的包装器包含到 Boost.Python 接口中。这是相当低级的,主要关注如何解决更困难的问题,即如何在不复制的情况下将 C++ 数据传入和传出 NumPy,但以下是如何执行复制的 std::vector 返回:

#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);
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何从 boost::python 返回 numpy.array? 的相关文章

随机推荐