首页 > 解决方案 > 来自 std::vector 的映射到 Eigen::VectorXi

问题描述

有没有办法以下列方式直接将 a 映射std::vector<unsigned>到a 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());

标签: c++eigen

解决方案


你的线路

Eigen::VectorXi c = Eigen::VectorXi::Map(a.data(), a.size());

不会“直接将 a 映射std::vector<unsigned>Eigen::VectorXi”,而是将数据复制到新的Eigen::VectorXi. 如果你想用 Eigen 功能包装现有的数据数组,你应该使用类似的东西:

Eigen::Map<Eigen::VectorXi> wrappedData(a.data(), a.size());

wrappedData然后,您可以像使用其他任何方法一样使用 use VectorXi,但调整基础数据的大小(仍由 拥有std::vector)除外。有关更多详细信息,请参阅文档

如果您试图避免将数据复制到 astd::vector<int>那么您可以使用“自定义”矩阵类型,即

typedef Eigen::Matrix<unsigned int, Eigen::Dynamic, 1> VectorXui;
Eigen::Map<VectorXui> wrappedData(a.data(), a.size());

推荐阅读