Vector 在特征向量中递归地cat一个向量

Vector 在特征向量中递归地cat一个向量,vector,eigen,cat,Vector,Eigen,Cat,我有一个特征向量。我想递归地搜索它。比如说 Eigen::Vector3d vec; vec << 5, 6, 7; Eigen::VectorXd vecCat; for(int i=0;i<3;i++) vecCat << vec(i),0,0; cout<<vecCat<<endl; 这样最终的输出将是 vecCat=50 0 6 0 0 7 0 0 0 如果我按上面的方法做,我会出错。有人能帮我吗?正如我在评论

我有一个特征向量。我想递归地搜索它。比如说

 Eigen::Vector3d vec;
 vec << 5, 6, 7;
 Eigen::VectorXd vecCat;
 for(int i=0;i<3;i++)
      vecCat << vec(i),0,0;
 cout<<vecCat<<endl;
这样最终的输出将是 vecCat=50 0 6 0 0 7 0 0 0


如果我按上面的方法做,我会出错。有人能帮我吗?

正如我在评论中所说,我不会解释如何迭代使用CommainInitializer。但这里有一个使用Eigen::Map的解决方案:


如果我没有弄错的话,在Eigen中,你不能用@Dark_Daiver来填充向量,理论上可以,但是你需要将commainInitializer的返回值存储在一个变量中,我没有详细说明,因为这不是有意的,也不能保证是未来的证明。正如您所说,使用循环和[]运算符要容易得多。或者,将其存储在3x3临时矩阵中,并将其映射回矢量。请详细说明您提出的两种解决方案?我不能清楚地理解,我也是一个初学者。谢谢chtz,这确实非常有帮助
Eigen::Vector3d vec;
vec << 5,6,7;
Eigen::VectorXd vecCat = Eigen::VectorXd::Zero(9); // result vector
{
    // map vector to 3x3 matrix:
    Eigen::Map<Eigen::MatrixXd> map(vecCat.data(), 3,3);
    map.row(0) = vec.transpose(); // set top elements to elements of vec
}
std::cout << vecCat.transpose() << '\n';
Eigen::MatrixXd::Map(vecCat.data(), 3, 3).row(0) = vec.transpose();