【问题标题】:Replace a matrix by a diagonal matrix using a predefined list using Eigen使用 Eigen 使用预定义列表将矩阵替换为对角矩阵
【发布时间】:2017-05-16 10:45:40
【问题描述】:

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

     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]

怎么办呢。

【问题讨论】:

    标签: c++ matrix eigen


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-03
      相关资源
      最近更新 更多