Search code examples
eigeneigen3

Non-owning Eigen::MatrixXd


I would like to matrix multiply data in std::mdspan i.e. have something like

auto mat_mult(std::mdspan, std::mdspan) -> mdvector;

But as far as I can tell Eigen only supports owning MatrixXd


Solution

  • To be as confusing as possible, Eigen calls its non-owning type Map

    float data[] = {1,2,3,4};
    Map<Vector3f> v1(data);       // uses v1 as a Vector3f object
    Map<ArrayXf>  v2(data,3);     // uses v2 as a ArrayXf object
    Map<Array22f> m1(data);       // uses m1 as a Array22f object
    Map<MatrixXf> m2(data,2,2);   // uses m2 as a MatrixXf object
    

    https://eigen.tuxfamily.org/dox/group__QuickRefPage.html