特征:如何制作矩阵的深层副本?

时间:2015-03-24 11:43:48

标签: c++ matrix eigen

使用Eigen C ++库,如何制作矩阵的深层副本?例如,如果我有:

Eigen::Matrix4f A;
Eigen::Matrix4f B = A;

然后我修改A,它也会修改B。但我希望B成为原始A元素的副本。我怎么能得到这个?

1 个答案:

答案 0 :(得分:1)

初始化矩阵时请勿使用auto,因为它会使A = B成为浅表。 auto还会导致其他意外结果。请改用MatrixXd

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

using namespace Eigen;

typedef Matrix<double,Dynamic,Dynamic,RowMajor> MyMatrix;

int main()
{
    double a[] = {1,2,3,4};
    auto M = Map<MyMatrix>(a, 2, 2);
    auto G = M;
    MatrixXd g = M;
    G(0,0) = 0;
    std::cout << M << "\n" << std::endl;
    std::cout << G << "\n" << std::endl;
    std::cout << g << "\n" << std::endl;
}

代码将输出:

0 2
3 4

0 2
3 4

1 2
3 4