C++ 使用预定义的列表(使用特征值)将矩阵替换为对角矩阵

C++ 使用预定义的列表(使用特征值)将矩阵替换为对角矩阵,c++,matrix,eigen,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];

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

     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; 
     }
现在,我想根据预先指定的列表,将重向量的元素放置到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]

如何操作。

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

     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]