c++ - 来自 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());
解决方案
你的线路
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());
推荐阅读
- google-cloud-platform - GCP External LoadBalancer jinja 部署
- javascript - 与 angular6 中 *ngFor 中的多个 mat-table 相关的问题
- php - Yii2登录后角色切换
- api - 有什么方法可以确保最新 wso2ei 6.4.0 中部署的 REST 服务的基本身份验证?
- arrays - 如何从 O(logn) 复杂度的未排序数组中删除?
- encryption - 从十六进制和 LRC 解码数据
- r - 如果我在不同情况下需要不同的结尾,如何构造一个 for 循环?
- vb.net - 删除 PowerPoint 幻灯片标题
- ios - 使用 Siri 快捷方式为一项特定任务注册多个短语
- python - GCP 部署管理器 - 删除防火墙规则(如果存在)