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.
相关产品推荐
相关产品推荐

