从2d std :: vector初始化Eigen :: MatrixXd

Fan*_*Fox 8 c++ eigen

这应该很简单,但我无法在Eigen文档中找到方法.

说我有一个2D矢量,即

std::vector<std::vector<double> > data

假设它充满了10 x 4数据集.

我如何使用这些数据来填写Eigen::MatrixXd mat.

显而易见的方法是使用这样的for循环:

#Pseudo code
Eigen::MatrixXd mat(10, 4);
for i : 1 -> 10
   mat(i, 0) = data[i][0];
   mat(i, 1) = data[i][1];
   ...
 end
Run Code Online (Sandbox Code Playgroud)

但是应该有更好的方式,这是Eigen原生的?

us2*_*012 10

当然可以.您不能一次执行整个矩阵,因为vector<vector>在连续内存中存储单行,但连续的行可能不是连续的.但是您不需要分配行的所有元素:

std::vector<std::vector<double> > data;
MatrixXd mat(10, 4);
for (int i = 0; i < 10; i++)
  mat.row(i) = VectorXd::Map(&data[i][0],data[i].size());
Run Code Online (Sandbox Code Playgroud)