这应该很简单,但我无法在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原生的?
答案 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());