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

C++中如何将std::vector<double>转换为Eigen::ArrayXd?

将std::vector转换为Eigen::ArrayXd的简便方法

你之前的尝试失败是因为只传递了数据指针,Eigen的构造函数需要同时指定数据指针和元素数量。下面是两种更简便的转换方式:

方法一:直接使用Eigen构造函数

直接通过std::vector的data()指针和size()来初始化ArrayXd,这会创建新数组并拷贝vector中的数据:

#include <Eigen/Dense>
#include <vector>

// 假设已有std::vector<double> oldVector
std::vector<double> oldVector = {1.0, 2.0, 3.0, 4.0};
Eigen::ArrayXd newEigen(oldVector.data(), oldVector.size());

方法二:使用Eigen::Map(零拷贝/可选拷贝)

如果不需要额外拷贝数据,只是想让Eigen直接操作vector的内存,可以用Eigen::Map,这种方式更高效:

// 直接映射,不拷贝数据(注意:vector不能被销毁或重新分配内存,否则映射会失效)
Eigen::Map<Eigen::ArrayXd> mappedArray(oldVector.data(), oldVector.size());

// 如果需要拷贝一份独立的ArrayXd,直接赋值即可:
Eigen::ArrayXd copiedEigen = mappedArray;

关键注意点

  • std::vector的内存是连续的,完全符合Eigen对输入数据的内存布局要求,可安全使用上述方法。
  • 确保使用Eigen 3.x及以上版本,这类构造方式在该版本及之后均支持。

内容的提问来源于stack exchange,提问作者Fernando A.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:15:45