Search code examples
c++eigen

Eigen how to concatenate matrix along a specific dimension?


I have two eigen matrices and I would like to concatenate them, like in matlab cat(0, A, B)

Is there anything equivalent in eigen?

Thanks.


Solution

  • You can use the comma initializer syntax for that.

    Horizontally:

    MatrixXd C(A.rows(), A.cols()+B.cols());
    C << A, B;
    

    Vertically:

    // eigen uses provided dimensions in declaration to determine
    // concatenation direction
    MatrixXd D(A.rows()+B.rows(), A.cols()); // <-- D(A.rows() + B.rows(), ...)
    D << A, B; // <-- syntax is the same for vertical and horizontal concatenation
    

    For readability, one might format vertical concatenations with whitespace:

    D << A,
         B; // <-- But this is for readability only.