我正在使用pybind11
为我的C++库创建一个使用Eigen类型的Python绑定。(Eigen::Matrix
成员的Python目标类)元素,Writeable标志设置为false,因此是不可修改的。我已经设法将我的问题减少到以下MWE:
// binding.cpp
#include "Eigen/Dense"
#include "pybind11/pybind11.h"
#include "pybind11/eigen.h"
struct Example {
Eigen::Matrix<double, 3, 1> m;
};
namespace py = pybind11;
PYBIND11_MODULE(MyBinding, m)
{
py::class_<Example>(m, "Example")
.def(py::init<>())
.def_readwrite("m", &Example::m);
}
个字符
相反,当绑定以下代码时,一切都按预期工作,即在Python中调用时,f
返回的值是可修改的(将Writeable标志设置为true):
Eigen::Matrix<double,3,1> f() {
return {};
}
PYBIND11_MODULE(MyBinding, m)
{
m.def("f", &f);
}
型
我错过了什么?谢谢你的帮助!
1条答案
按热度按时间os8fio9y1#
def_readwrite(⋯)
是def_property(⋯)
的快捷方式(源代码链接),其中getter通过const
-reference获取类示例。因此,生成的numpy数组不可修改。你需要做的就是编写自定义的getter和setter函数:
字符串
**注意:**未经测试的代码,您可能需要传递额外的返回值策略参数