Eigen笔记——默认列优先的存储方式

发布时间 2023-04-28 16:24:02作者: 水水滴答

C++数据转换到Eigen时(Eigen::Map),要注意,Eigen默认按列优先存储。列优先因为存储位置相邻会比行优先更快些。

注意:当用输入运算符<<时,都是一行一行输入,不管该矩阵是否是指定的行优先还是列优先.

    //无论设置的是行优先还是列优先,输入<<后,都是行优先排列
    Eigen::Matrix<float,3,2, Eigen::RowMajor> col_x1;
    Eigen::Matrix<float,3,2, Eigen::ColMajor> col_x2;
    col_x1 << 1, 2, 3, 4, 5, 6;
    col_x2 << 1, 2, 3, 4, 5, 6;
    std::cout << "row major 1:\n" << col_x1 << std::endl;
    std::cout << "col major 2:\n" << col_x2 << std::endl;

    // demo2  c++数组传入给Eigen后,默认按列排
    float arr[6] = {1,2,3,4,5,6};
    Eigen::Map<Eigen::Matrix<float,3,2>> col_x3(arr);
    Eigen::Map<Eigen::Matrix<float,3,2, Eigen::RowMajor>> col_x4(arr);
    std::cout << "col major 3:\n" << col_x3 << std::endl;
    std::cout << "row major 4:\n" << col_x4 << std::endl;

结果如下:

row major 1:
1 2
3 4
5 6
col major 2:
1 2
3 4
5 6
col major 3:
1 4
2 5
3 6
row major 4:
1 2
3 4
5 6