我有一个特征向量。我想要递归地捕捉它。例如
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
如果我按照上述方式操作,我会收到错误消息。任何人都可以帮助我吗?
答案 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();