C++ 将Eigen::VectorXd类型转换为std::vector
它们有许多相反的链接,但在我的特定情况下,我无法从Eigen::Matrix或Eigen::VectorXd中找到std::vector;C++ 将Eigen::VectorXd类型转换为std::vector,c++,eigen,C++,Eigen,它们有许多相反的链接,但在我的特定情况下,我无法从Eigen::Matrix或Eigen::VectorXd中找到std::vector; vector<int> vec(mat.data(), mat.data() + mat.rows() * mat.cols()); 您不能进行类型转换,但可以轻松复制数据: VectorXd v1; v1 = ...; vector<double> v2; v2.resize(v1.size()); VectorXd::Map(&
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;
VectorXd v1;
v1=。。。;
矢量v2;
v2.调整大小(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;
}
//初始化第一个向量
std::向量v1;
v1.推回(0.5);
v1.推回(1.5);
v1.推回(2.5);
v1.推回(3.5);
//从v1到eignen向量
浮点*ptr_数据=&v1[0];
Eigen::VectorXf v2=Eigen::Map(v1.data(),v1.size());
//从特征向量到标准向量
std::vector v3(&v2[0],v2.data()+v2.cols()*v2.rows());
//查证
对于(int i=0;i std::cout heyy谢谢你的回复..但是我发现上面的答案更清楚。mat.rows()*mat.cols()
可以简化为mat.size()
,但是,请注意,此解决方案仅适用于普通的矩阵
对象,而使用映射
也适用于子矩阵。如果有人需要将矩阵的一行复制到向量中:向量向量(arr.cols());映射(&vec[0],1,mat.cols())=mat.row(0);
v1.data()
应替换为ptr\U数据
,否?