You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从std::vector初始化自定义typedef的EigenVectorX向量?

用std::vector初始化EigenVectorX的几种方法

针对你的代码场景,这里提供几种实用的初始化方式:

1. 零拷贝映射(高效推荐)

利用Eigen::Map直接将std::vector的内存映射为Eigen向量,无需额外数据拷贝,性能最优:

EigenVectorX ev = Eigen::Map<EigenVectorX>(v.data(), v.size());

如果需要生成独立的向量副本(后续修改ev不会影响原vector),只需追加.copy():

EigenVectorX ev = Eigen::Map<EigenVectorX>(v.data(), v.size()).copy();

2. 先调整尺寸再批量赋值

先将ev的尺寸调整为和vector一致,再通过标准库的拷贝函数完成赋值:

ev.resize(v.size());
std::copy(v.begin(), v.end(), ev.data());

如果习惯手动遍历赋值,也可以这样写:

ev.resize(v.size());
for (size_t i = 0; i < v.size(); ++i) {
    ev(i) = v[i];
}

3. 定义时直接构造

如果在声明ev的同时完成初始化,可以结合Map或拷贝操作:

// 基于Map构造
EigenVectorX ev(Eigen::Map<const EigenVectorX>(v.data(), v.size()));

// 先指定尺寸再拷贝
EigenVectorX ev(v.size());
std::copy(v.begin(), v.end(), ev.data());

内容的提问来源于stack exchange,提问作者Kumar Roshan Mehta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:32:00