Search code examples
c++eigen

how to change values in matrixXd eigen using block?


In my code I am using a MatrixXd array using eigen C++. I want to change my matrix as shown below

#include <eigen3/Eigen/Dense>
int main(){
   Eigen::MatrixXd m(3,3);
   m << 1,2,3,
       4,5,6,
       7,8,9;
  // fixed-size block expression
  m.block<1,2>(0,0) = 99; // Compiler Error
  //dynamic-size block expression 
  m.block(0,0,1,2) = 99; // Compiler Error


  std::cout<<m<<endl; 
 }

Expected Output:

 99  99   3
  4   5   6
  7   8   9

Solution

  • If m is a Matrix object you need to write either of these:

     m.block<1,2>(0,0).setConstant(99);
     m.block<1,2>(0,0).array() = 99;
    

    Alternativly, declare m as an ArrayXXd object:

    Eigen::ArrayXXd m(3,3);
    m << 1,2,3,
         4,5,6,
         7,8,9;
    m.block<1,2>(0,0) = 99;