将 Eigen::VectorXd 转换为 std::vector<double>
Converting an Eigen::VectorXd to an std::vector<double>
正如标题所说,我正在尝试将 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;
}
我认为这是实现它的方法,但是它不起作用。我收到以下错误。
C:\CBProjects\eigenVectors\main.cpp|20|error: no match for call to '(std::vector<double>) (Eigen::DenseCoeffsBase<Eigen::Matrix<double, -1, 1>, 1>::Scalar*, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1> >::Scalar*)'|
我看不出我做错了什么。任何帮助将不胜感激。
尽管已经声明了向量,但您正在为 std::vector
vec
使用构造函数语法。那是行不通的。
有两种有效的方法可以将 Eigen::VectorXd
的内容复制到 std::vector<double>
。你可以构造一个新的 std::vector
vec2
,像这样:
vector<double> vec2(firstEvector.data(), firstEvector.data() + firstEvector.size());
或使用先前声明的向量 vec
并使用 Eigen::Map
从 Eigen::VectorXd
传输数据。但在那种情况下,首先需要调整 std::vector
的大小:
vec.resize(firstEvector.size());
Map<VectorXd>(vec.data(), vec.size()) = firstEvector;
正如标题所说,我正在尝试将 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;
}
我认为这是实现它的方法,但是它不起作用。我收到以下错误。
C:\CBProjects\eigenVectors\main.cpp|20|error: no match for call to '(std::vector<double>) (Eigen::DenseCoeffsBase<Eigen::Matrix<double, -1, 1>, 1>::Scalar*, Eigen::PlainObjectBase<Eigen::Matrix<double, -1, 1> >::Scalar*)'|
我看不出我做错了什么。任何帮助将不胜感激。
尽管已经声明了向量,但您正在为 std::vector
vec
使用构造函数语法。那是行不通的。
有两种有效的方法可以将 Eigen::VectorXd
的内容复制到 std::vector<double>
。你可以构造一个新的 std::vector
vec2
,像这样:
vector<double> vec2(firstEvector.data(), firstEvector.data() + firstEvector.size());
或使用先前声明的向量 vec
并使用 Eigen::Map
从 Eigen::VectorXd
传输数据。但在那种情况下,首先需要调整 std::vector
的大小:
vec.resize(firstEvector.size());
Map<VectorXd>(vec.data(), vec.size()) = firstEvector;