本文介绍了从2d std :: vector初始化一个Eigen :: MatrixXd的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这应该是很简单,但我不能找到一个办法在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的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

07-27 16:54