将特征矩阵转换为 std::vector<std::array<>> 形式
convert eigen matrix into std::vector<std::array<>> form
如何将特征矩阵转换为 std::vector<std::array<>>
形式?假设我有一个特征矩阵 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;
如何将特征矩阵转换为 std::vector<std::array<>>
形式?假设我有一个特征矩阵 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;