Initialize an Eigen::MatrixXd from a 2d std::vector

妖精的绣舞 提交于 2019-12-18 10:56:47

问题


This should hopefully be pretty simple but i cannot find a way to do it in the Eigen documentation.

Say i have a 2D vector, ie

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

Assume it is filled with 10 x 4 data set.

How can I use this data to fill out an Eigen::MatrixXd mat.

The obvious way is to use a for loop like this:

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

But there should be a better way that is native to Eigen?


回答1:


Sure thing. You can't do the entire matrix at once, because vector<vector> stores single rows in contiguous memory, but successive rows may not be contiguous. But you don't need to assign all elements of a row:

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());


来源:https://stackoverflow.com/questions/18839240/initialize-an-eigenmatrixxd-from-a-2d-stdvector

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!