Pybind11:从 C++ 端创建和 return numpy 数组
Pybind11: Create and return numpy array from C++ side
如何从 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
}
如何从 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
}