How to convert vector<Eigen::Vector3f> to Eigen::Matrix3Xf ?
and
inverse operation ?
#include <Eigen/Eigen>
#include <iostream>
#include <vector>
using namespace std;
vector<Eigen::Vector3f> x{{1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}};
Eigen::Matrix3Xf y;
y = x?
vector<Eigen::Vector3f> x;
Eigen::Matrix3Xf y{{1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}, {1.0, 2.0, 3.0}};
x = y?
CodePudding user response:
Assignment vector to Matrix, use a Map (you need to make sure that x.size()>0):
// Works as constructor or assignment:
Eigen::Matrix3Xf y = Eigen::Matrix3Xf::Map(x[0].data(), 3, x.size());
The other way around, you can use the iterator interface of Eigen:
// Constructor:
vector<Eigen::Vector3f> x(y.colwise().begin(), y.colwise().end());
// Assignment:
x.assign(y.colwise().begin(), y.colwise().end());
Usually, there is no need to copy between both representations, you can use Eigen::Map directly in Eigen expressions or pass Eigen iterators directly to std algorithms.
