问题描述
这应该是很简单,但我不能找到一个办法在Eigen文档。
This should hopefully be pretty simple but i cannot find a way to do it in the Eigen documentation.
说我有一个2D向量,即
Say i have a 2D vector, ie
std :: vector< std :: vector< double> > data
假设它填充有 10 x 4
数据集。
Assume it is filled with 10 x 4
data set.
如何使用此数据填写 Eigen :: MatrixXd mat
。
显而易见的方法是使用如下的for循环:
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
但是应该有一个更好的方法是原生到Eigen?
But there should be a better way that is native to Eigen?
推荐答案
当然。您不能一次完成整个矩阵,因为 vector
在连续内存中存储单行,但连续行可能不连续。但是,您不需要分配行的所有元素:
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);
这篇关于从2d std :: vector初始化一个Eigen :: MatrixXd的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!