将特征矩阵转换为std :: vector <std :: array <>>形式

时间:2019-03-23 10:28:09

标签: c++ arrays matrix vector eigen

如何将本征矩阵转换为std::vector<std::array<>>形式?假设我有一个本征矩阵Eigen::MatrixXd A(4,3)。可以转换为std::vector<std::array<double,3>>形式的矩阵A吗?

1 个答案:

答案 0 :(得分:4)

您可以使用std::vector<std::array<double,3>>Eigen::Map的内存映射到可写的本征类型,例如,

// typedef for brevity, if you need this more often: 
typedef Eigen::Matrix<double, 4, 3, Eigen::RowMajor> Mat43dR;

std::vector<std::array<double,3>> raw_data;
raw_data.resize(4); // allocate memory for 4x3 entries
// Copy A to raw_data:
Mat43dR::Map(raw_data[0].data() ) = A;

当然,您也可以使用raw_dataEigen::Map阅读。还有一些使用Eigen::Map的替代方法:https://eigen.tuxfamily.org/dox/group__TutorialMapClass.html

附录:如果在编译时不知道A的大小,则可以像这样使用Dynamic的大小:

typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> MatXXdR;
std::vector<std::array<double,3>> raw_data; // the `3` must still be known at compile-time
assert(A.cols()==3);
raw_data.resize(A.rows()); // allocate memory for Nx3 entries
// Copy A to raw_data:
MatXXdR::Map(raw_data[0].data(), A.rows(), A.cols() ) = A;