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

时间:2013-09-16 23:56:10

标签: 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

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

1 个答案:

答案 0 :(得分:9)

当然可以。您不能一次完成整个矩阵,因为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());