c++ - Eigen:如何制作矩阵的深层拷贝?

标签 c++ matrix eigen

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

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

然后我修改 A ,它也会修改 B .但我要B原版元素的拷贝A .我怎样才能得到这个?

最佳答案

请勿使用 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

关于c++ - Eigen:如何制作矩阵的深层拷贝?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29231798/

相关文章:

c++ - CMake 在 build 和 src 目录之间拆分生成的文件

c++ - 为什么 libstdc++ 以相反的顺序存储 std::tuple 元素?

c++ - 映射与 block 不一致的特征矩阵引用对象

c++ - 在 C 项目中使用 Eigen

c++ - 使用 C++ 更新 XML 节点值

c++ - 在 C++ 错误中将数组作为参数传递

for-loop - 在 Maxima 中,我该如何解这个方程?

python - numpy:跨数组广播矩阵乘法

python - 2D 数组的 Numpy 按元素均值计算

c++ - 小数 Eigen 稀疏矩阵乘法误差