递归地在Eigen中捕捉一个向量

时间:2017-05-02 05:35:45

标签: 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 = 5 0 0 6 0 0 7 0 0

如果我按照上述方式操作,我会收到错误消息。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

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

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';

如果row(0)是您需要在map中修改的所有内容,您可以选择(而不是{ }块)写一下:

Eigen::MatrixXd::Map(vecCat.data(), 3, 3).row(0) = vec.transpose();