Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 本征返回类型的Pybind11问题_Python_C++_Return Type_Eigen3_Pybind11 - Fatal编程技术网

Python 本征返回类型的Pybind11问题

Python 本征返回类型的Pybind11问题,python,c++,return-type,eigen3,pybind11,Python,C++,Return Type,Eigen3,Pybind11,我试图使用pybind11向python公开data\u all,它是数据的向量: struct data { std::vector<Eigen::ArrayXf> values; std::vector<int> indices; float x; float y; float z; }; class dataBuffer { public: std::vector<data> data_all;

我试图使用
pybind11
向python公开
data\u all
,它是
数据的向量:

struct data {
    std::vector<Eigen::ArrayXf> values;
    std::vector<int> indices;
    float x;
    float y;
    float z;
};

class dataBuffer {
public:
    std::vector<data> data_all;
    Eigen::ArrayXf getValues(ssize_t i, ssize_t j) { return data_all.at(i).values.at(j); };
};
< >我的C++示例代码是

namespace py = pybind11;
int main()
{
    data d;
    d.x = 1.1;
    d.y = 2.1;
    d.z = 3.1;
    d.indices.push_back(4);
    d.values.push_back(Eigen::ArrayXf::LinSpaced(50, 0.0, 50 - 1.0));
    d.indices.push_back(5);
    d.values.push_back(Eigen::ArrayXf::LinSpaced(60, 0.0, 60 - 1.0));
    d.indices.push_back(11);
    d.values.push_back(Eigen::ArrayXf::LinSpaced(70, 0.0, 70 - 1.0));

    dataBuffer D;
    D.data_all.push_back(d);
    D.data_all.push_back(d);
    std::cout << D.getValues(0,0) << "\n";

    py::scoped_interpreter guard{};
    py::object result = py::module::import("pybind11_test").attr("testData")(0,0);

}
帮助(缓冲区)
打印以下签名:

Help on method getValues in module example:

getValues(...) method of example.dataBuffer instance
    getValues(self: example.dataBuffer, arg0: int, arg1: int) -> Eigen::Array<float,-1,1,0,-1,1>
我相信Python不喜欢
Eigen
返回类型。有人能帮我解决问题吗?我应该如何帮助Python理解
getValues
的返回类型,以便使用
numpy
库进一步处理它?

我假设这行:

py::object result = py::module::import("pybind11_test").attr("testData")(0,0);
其目的是:

py::object result = py::module::import("pybind11_test").attr("testData")(D);
除此之外,您所缺少的是:

#include "pybind11/eigen.h"

在您的包装代码顶部。

Wim,如果您有机会,我能听听您对我在这里发布的问题的想法吗?
py::object result = py::module::import("pybind11_test").attr("testData")(0,0);
py::object result = py::module::import("pybind11_test").attr("testData")(D);
#include "pybind11/eigen.h"