2017-05-16 1 views
0

J'ai un vecteur dire que je veux utiliser pour former un vecteur de matrices diagonales comme suitRemplacer une matrice par une matrice diagonale à l'aide d'une liste prédéfinie à l'aide 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; 
    } 

J'ai maintenant un plus grand Matrices disent

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

Je veux maintenant de placer les éléments de la diavector dans des positions appropriées de la matrice N conformément à une liste pré-assignée. par exemple, si

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

qui donne la position du vecteur dans lequel les matrices de blocs doivent être insérées pour obtenir une matrice N comme

 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] 

Comment ne s'y prendre.

Répondre

0

Vous pouvez utiliser N.middleCols(listIndices[i]*stride, stride) = temp.asDiagonal(), où, pour votre exemple, stride est égal à 2.