将Eigen::VectorXd类型转换为std::vector

typecasting Eigen::VectorXd to std::vector

本文关键字:std vector VectorXd Eigen 类型转换      更新时间:2023-10-16

他们有很多链接可以反过来,但在我的特定情况下,我找不到从Eigen::Matrix或Eigen::VectorXd中获得std::向量。

vector<int> vec(mat.data(), mat.data() + mat.rows() * mat.cols());

你不能打字,但你可以很容易地复制数据:

VectorXd v1;
v1 = ...;
vector<double> v2;
v2.resize(v1.size());
VectorXd::Map(&v2[0], v1.size()) = v1;

您可以从和到特征向量进行此操作:

    //init a first vector
    std::vector<float> v1;
    v1.push_back(0.5);
    v1.push_back(1.5);
    v1.push_back(2.5);
    v1.push_back(3.5);
    //from v1 to an eignen vector
    float* ptr_data = &v1[0];
    Eigen::VectorXf v2 = Eigen::Map<Eigen::VectorXf, Eigen::Unaligned>(v1.data(), v1.size());
    //from the eigen vector to the std vector
    std::vector<float> v3(&v2[0], v2.data()+v2.cols()*v2.rows());

    //to check
    for(int i = 0; i < v1.size() ; i++){
        std::cout << std::to_string(v1[i]) << " | " << std::to_string(v2[i]) << " | " << std::to_string(v3[i]) << std::endl;
    }