使用循环用数字填充矩阵 A(Eigen::Matrix2d A)

Joe*_*Joe 0 c++ eigen eigen3

每当我尝试这段代码时,我都会得到一个断言失败!如何使用循环填充矩阵 A ?

#include <iostream>
#include "../eigen3/Eigen/Dense"
int main ()
{
 Eigen::Matrix2d A;
 for (int row = 0; row < 5; ++row)
  {
   for (int col = 0; col < 5; ++col)
    {
//     A(row,col)=10;   // ???
    }
  }

}
Run Code Online (Sandbox Code Playgroud)

hfh*_*hc2 5

嗯,你在做什么是正确的。但是,Matrix2d顾名思义,该类是一个 2x2 矩阵。所以你不能将 row/col 增加到 1 以上:

 Eigen::Matrix2d A;
 for (int row = 0; row < 2; ++row)
  {
   for (int col = 0; col < 2; ++col)
    {
     A(row,col) = 10;
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果您想要一个 5x5 矩阵,您可以使用带有合适构造函数的 Xd 矩阵:

 Eigen::MatrixXd A(5, 5);
 for (int row = 0; row < 5; ++row)
  {
   for (int col = 0; col < 5; ++col)
    {
     A(row,col) = 10;
    }
  }
Run Code Online (Sandbox Code Playgroud)

如果在编译时已知维度,您可以选择使用避免内存分配并存在于堆栈中的实现:

 Eigen::Matrix<double, 5, 5> A;
 for (int row = 0; row < 5; ++row)
  {
   for (int col = 0; col < 5; ++col)
    {
     A(row,col) = 10;
    }
  }
Run Code Online (Sandbox Code Playgroud)