将特征::VectorXd转换为std::vector<;双倍>;

将特征::VectorXd转换为std::vector<;双倍>;,vector,eigen,Vector,Eigen,正如标题所说,我正在尝试将一个Eigen::VectorXd转换为一个std::vector。向量是通过对一个矩阵进行对角化,然后取过程的第一个特征向量得到的 #include <iostream> #include <vector> #include <cmath> #include <iomanip> #include <Eigen/Dense> using namespace std; using namespace Eigen

正如标题所说,我正在尝试将一个Eigen::VectorXd转换为一个std::vector。向量是通过对一个矩阵进行对角化,然后取过程的第一个特征向量得到的

#include <iostream>
#include <vector>
#include <cmath>
#include <iomanip>
#include <Eigen/Dense>

using namespace std;
using namespace Eigen;

using namespace std;

int main()
{
    vector<double> vec;
    MatrixXd ones = MatrixXd::Ones(3,3);
    VectorXd firstEvector;
    SelfAdjointEigenSolver<MatrixXd> es(ones);
    firstEvector = es.eigenvectors().col(1);
    cout << "The first eigenvector of the 3x3 matrix of ones is:" << endl << firstEvector << endl;
    vec(&firstEvector[0], firstEvector.data() + firstEvector.cols()*firstEvector.rows());
    return 0;
}
#包括
#包括
#包括
#包括
#包括
使用名称空间std;
使用名称空间特征;
使用名称空间std;
int main()
{
向量向量机;
MatrixXd-one=MatrixXd::one(3,3);
向量x第一波因子;
自伴(个);
firstEvector=es.eignvectors().col(1);

cout您正在为
std::vector
vec
使用构造函数语法,尽管该向量已经声明。这不起作用

Eigen::VectorXd
的内容复制到
std::vector
中有两种有效的方法。您可以构建一个新的
std::vector
vec2
,如下所示:

vector<double> vec2(firstEvector.data(), firstEvector.data() + firstEvector.size());

谢谢,这正是我想要的。
vector<double> vec2(firstEvector.data(), firstEvector.data() + firstEvector.size());
vec.resize(firstEvector.size());
Map<VectorXd>(vec.data(), vec.size()) = firstEvector;