亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

特征返回類型的 Pybind11 問題

特征返回類型的 Pybind11 問題

慕萊塢森 2022-07-12 09:49:05
我正在嘗試使用以下方法公開data_all哪個是datapython的向量pybind11: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); };};我將pybind11包裝器定義如下:PYBIND11_MODULE(example, m) {    py::class_<data>(m, "data")        .def(py::init<>())        .def_readonly("values", &data::values)        .def_readonly("indices", &data::indices)        .def_readonly("x", &data::x)        .def_readonly("y", &data::y)        .def_readonly("z", &data::z);    py::class_<dataBuffer>(m, "dataBuffer")        .def(py::init<>())        .def("getValues", &dataBuffer::getValues);}我的 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);}pybind11_test.py文件的內容import numpy as npimport example as mdef testData(buffer):    help(buffer)    a = buffer.getValues(0,0) # trying to retrieve the data buffer created in C++    print(a)help(buffer)打印以下簽名: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>我相信EigenPython 不喜歡返回類型。有人可以幫我解決問題嗎?我應該如何幫助 Python 理解返回類型,getValues以便我可以使用numpy庫進一步處理它?
查看完整描述

1 回答

?
人到中年有點甜

TA貢獻1895條經驗 獲得超7個贊

我假設這條線:

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"

在包裝代碼的頂部。


查看完整回答
反對 回復 2022-07-12
  • 1 回答
  • 0 關注
  • 104 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號