gpt4 book ai didi

python - 获取引用的 Eigen3 矩阵的所有权

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:08 25 4
gpt4 key购买 nike

如何通过引用将特征矩阵 A 传递给函数,然后窃取 A 的所有权?

我正在为 Python 编写一个 C++ 扩展,它接受两个 std::vector<Eigen::Ref<Mat> >并返回 std::vector<Mat> .返回 vector 的每个元素都可以是输入 vector 中引用的新矩阵或旧矩阵。

pybind11 中的示例提到了 C++ 和 Python 之间的传递引用 Eigen::Ref在这里 ( pybind11 doc )。

我尝试修改示例(来自 old bug report )。但是源并没有 move 到目标。这是因为源矩阵最后不为空。

测试:

#include <iostream>
#include <eigen3/Eigen/Dense>

typedef Eigen::MatrixXd Mat;

Mat func(Eigen::Ref<Mat> ref) {
Mat target(std::move(ref));
return target;
}

int main() {
const std::size_t n = 2;
Mat source = Mat::Zero(n, n);
Mat target = func(source);
std::cout << "source\n" << source << "\n";
std::cout << "target\n" << target << "\n";
return 0;
}

结果:

source
0 0
0 0
target
0 0
0 0

最佳答案

这是不可能的,因为 Ref<MatrixXd> 的内存布局比 MatrixXd 更通用它甚至不拥有它引用的数据!所以你唯一的解决办法是通过 MatrixXd& .

关于python - 获取引用的 Eigen3 矩阵的所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48482702/

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