【问题标题】:C++ Eigen move arrayXXd to MatrixXdC++ Eigen 将 arrayXXd 移动到 MatrixXd
【发布时间】:2013-05-07 06:27:09
【问题描述】:

我想将 Eigen::ArrayXXd 类型的数组移动(或交换)到 Eigen::MatrixXd。 为此,我尝试了,

#include <iostream>
#include <Eigen/Dense>
using namespace std;
int main(int , char** ) {
    Eigen::ArrayXXd array(100,100);
    auto mat2 = std::move(mat.matrix());
    cout << array.size() << endl;
    cout << mat.size() << endl;
}

输出显示两个大小都是 10000,这意味着数组被复制了。 为了避免复制,我也试过了,

    Eigen::MatrixXd mat;
    mat.swap(array.matrix());   (runtime error assert failure)
//  swap(array.matrix(), mat);  (compile error)

我测试的Eigen版本是3.2.0 beta1,使用的是gcc 4.8.0。从实验来看,矩阵和数组的移动语义似乎还没有实现。是对的吗?

有没有一种方法可以让我安全地移动(无需复制)?

【问题讨论】:

    标签: c++ c++11 eigen


    【解决方案1】:

    您不能强制移动某些东西。如果 Eigen 没有针对您尝试执行的操作的移动构造函数/赋值运算符(并且我在他们的文档中没有看到 Eigen 具有移动感知的证据),那么您无法移动它们。

    移动不是魔法;它需要类型作者的明确支持。

    【讨论】:

    • 谢谢,Eigen 现在好像不支持了。那么,有没有一种方法可以安全地交换它们而无需复制?实际上我的矩阵太大了,我内存不足。
    • @Sungmin:看文档。如果有交换的功能,它会这么说。
    • 据我从文档中了解到,有一个从 ArrayXXd 到 MatrixXd 的转换函数。两个不同的 MatrixXd 之间的交换也是如此。所以我猜有一种方法可以交换 ArrayXXd 和 MatrixXd。
    • 对了,我该如何回复?有时我在写“@”时会看到一些 ID 建议。现在没有建议出现。
    • @Sungmin 当您回复帖子的作者时,这是隐含的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 1970-01-01
    • 1970-01-01
    • 2015-04-19
    • 2022-08-08
    • 2013-03-07
    相关资源
    最近更新 更多