使用Eigen使用预定义列表用对角矩阵替换矩阵

时间:2017-05-16 10:45:41

标签: c++ matrix eigen

我有一个向量说我想用来形成对角矩阵的向量 如下

     double shapes=[2,3,4,5];
     Vector2d temp;
     std::vector<Eigen::DiagonalMatrix<double, 2> > diavector;
     diavector.resize(4);

     for(int i=0;i<4;i++){
       temp<<shapes[i],shapes[i];
       diavector[i]=temp.asDiagonal();
       cout<<diavector[i].toDenseMatrix()<<endl; 
     }

我现在有一个更大的矩阵说

    Eigen::MatrixXd N(2,12);
    N.setZero(2,12);

我现在想要根据预先指定的列表将diavector的元素放置到N矩阵的合适位置。例如,如果

   double listIndices={0,2,3,5}

给出了块所在向量的位置 必须插入矩阵以获得矩阵N,如

     N=[2 0 0 0 3 0 4 0 0 0 5 0 
        0 2 0 0 0 3 0 4 0 0 0 5]

如何解决这个问题。

1 个答案:

答案 0 :(得分:0)

您可以使用N.middleCols(listIndices[i]*stride, stride) = temp.asDiagonal(),例如,stride等于2。