gpt4 book ai didi

python - 我可以使用 pybind11 将 numpy 数组传递给接受 Eigen::Tensor 的函数吗?

转载 作者:行者123 更新时间:2023-11-30 03:13:49 25 4
gpt4 key购买 nike

我可以使用 pybind1 将三维 numpy 数组传递给接受 Eigen::Tensor 作为参数的 c++ 函数吗?例如,考虑以下 C++ 函数:

Eigen::Tensor<double, 3> addition_tensor(Eigen::Tensor<double, 3> a,
Eigen::Tensor<double, 3> b) {
return a + b;
}

编译函数后,将其导入 python 并将 numpy 数组 np.ones((1, 2, 2)) 传递给它,我收到以下错误消息:

TypeError: addition_tensor(): incompatible function arguments. The following argument types are supported:
1. (arg0: Eigen::Tensor<double, 3, 0, long>, arg1: Eigen::Tensor<double, 3, 0, long>) -> Eigen::Tensor<double, 3, 0, long>

我对无法传递三维 numpy 数组感到特别惊讶,因为我可以将二维 numpy 数组 传递给接受 Eigen::MatrixXd 的函数>,如:

Eigen::MatrixXd addition(Eigen::MatrixXd a, Eigen::MatrixXd b) { return a + b; }

我在这个例子中使用的全部代码是:

#include <eigen-git-mirror/Eigen/Dense>
#include <eigen-git-mirror/unsupported/Eigen/CXX11/Tensor>
#include "pybind11/include/pybind11/eigen.h"
#include "pybind11/include/pybind11/pybind11.h"

Eigen::MatrixXd addition(Eigen::MatrixXd a, Eigen::MatrixXd b) { return a + b; }

Eigen::Tensor<double, 3> addition_tensor(Eigen::Tensor<double, 3> a,
Eigen::Tensor<double, 3> b) {
return a + b;
}

PYBIND11_MODULE(example, m) {
m.def("addition", &addition, "A function which adds two numbers");
m.def("addition_tensor", &addition_tensor,
"A function which adds two numbers");
}

我用 g++ -shared -fPIC `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix` 编译了上面的代码。有人知道如何将三维 numpy 数组转换为接受三维 Eigen::Tensor 的函数吗?

最佳答案

它不直接受支持,这里有一些讨论(如果您想将其添加到您的项目中,包括一些进行映射的代码):https://github.com/pybind/pybind11/issues/1377

关于python - 我可以使用 pybind11 将 numpy 数组传递给接受 Eigen::Tensor 的函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58412795/

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