如何将Eigen矩阵转换为std::vector<std::array<>>
格式? 假设我有一个Eigen矩阵Eigen::MatrixXd A(4,3)
,是否可以将矩阵A转换为std::vector<std::array<double,3>>
格式?
您可以使用Eigen::Map
将std::vector<std::array<double,3>>
的内存映射到可写的Eigen类型中,例如:
// 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;
当然,您也可以使用 Eigen::Map
从 raw_data
中读取。还有一些与 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;
typedef Eigen::Matrix<double, A.rows(), A.cols(), Eigen::RowMajor> Mat43dR;
,但是出现了错误。有没有一种方法可以在不硬编码大小的情况下定义矩阵? - galib4x3
矩阵,但我添加了一个替代方案,如果你不知道这些。然而,对于 std::array
,你需要在编译时知道维度。 - chtzstd::vector<std::vector<double>>
这样你就会拥有一个动态大小的二维 double 向量。 - nlhnt
Eigen::MatrixXd
中访问每个值并将其复制到std::vector<std::array<double,3>>
中。 - πάντα ῥεῖ