从 std::vector<unsigned> 映射到 Eigen::VectorXi
Map from std::vector<unsigned> to Eigen::VectorXi
有没有办法按照以下方式将 std::vector<unsigned>
直接映射到 Eigen::VectorXi
?
std::vector<unsigned> a = {1,2,3,4,5};
Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());
我想跳过中间的以下步骤:
std::vector<int> b(a.begin(),a.end());
你的线路
Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());
不是 "directly map a std::vector<unsigned>
to an Eigen::VectorXi
,",而是将数据复制到新的 Eigen::VectorXi
。如果你想用 Eigen 功能包装现有的数据数组,你应该使用类似的东西:
Eigen::Map<Eigen::VectorXi> wrappedData(a.data(), a.size());
然后您可以像使用任何其他 VectorXi
一样使用 use wrappedData
,但调整基础数据(仍归 std::vector
所有)的大小除外。有关详细信息,请参阅 documentation。
如果您试图避免将数据复制到 std::vector<int>
,那么您可以使用 "custom" 矩阵类型,即
typedef Eigen::Matrix<unsigned int, Eigen::Dynamic, 1> VectorXui;
Eigen::Map<VectorXui> wrappedData(a.data(), a.size());
有没有办法按照以下方式将 std::vector<unsigned>
直接映射到 Eigen::VectorXi
?
std::vector<unsigned> a = {1,2,3,4,5};
Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());
我想跳过中间的以下步骤:
std::vector<int> b(a.begin(),a.end());
你的线路
Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());
不是 "directly map a std::vector<unsigned>
to an Eigen::VectorXi
,",而是将数据复制到新的 Eigen::VectorXi
。如果你想用 Eigen 功能包装现有的数据数组,你应该使用类似的东西:
Eigen::Map<Eigen::VectorXi> wrappedData(a.data(), a.size());
然后您可以像使用任何其他 VectorXi
一样使用 use wrappedData
,但调整基础数据(仍归 std::vector
所有)的大小除外。有关详细信息,请参阅 documentation。
如果您试图避免将数据复制到 std::vector<int>
,那么您可以使用 "custom" 矩阵类型,即
typedef Eigen::Matrix<unsigned int, Eigen::Dynamic, 1> VectorXui;
Eigen::Map<VectorXui> wrappedData(a.data(), a.size());