gpt4 book ai didi

python - Pybind11:从 C++ 端创建并返回 numpy 数组

转载 作者:太空狗 更新时间:2023-10-29 20:20:41 25 4
gpt4 key购买 nike

如何从 C++ 端创建一个 numpy 数组并将其提供给 python?

当 Python 不再使用返回的数组时,我希望 Python 进行清理。

C++ 端不会使用 delete ret; 来释放由 new double[size]; 分配的内存。

以下是正确的吗?

#include "pybind11/pybind11.h"
#include "pybind11/numpy.h"

namespace py = pybind11;

py::array_t<double> make_array(const py::ssize_t size) {
double* ret = new double[size];
return py::array(size, ret);
}

PYBIND11_MODULE(my_module, m) {
.def("make_array", &make_array,
py::return_value_policy::take_ownership);
}

最佳答案

你说的很对。下面是一个更好的解决方案。

#include "pybind11/pybind11.h"
#include "pybind11/numpy.h"

namespace py = pybind11;

py::array_t<double> make_array(const py::ssize_t size) {
// No pointer is passed, so NumPy will allocate the buffer
return py::array_t<double>(size);
}

PYBIND11_MODULE(my_module, m) {
.def("make_array", &make_array,
py::return_value_policy::move); // Return policy can be left default, i.e. return_value_policy::automatic
}

关于python - Pybind11:从 C++ 端创建并返回 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49179356/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com