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