一、Eigen矩阵存储顺序
在矩阵运算和线性代数中,"行优先"(Row-major)和"列优先"(Column-major)是两种不同的存储方式,它们决定了多维数组(如矩阵)在内存中的布局顺序。
1. 行优先(Row-major)
-
定义:矩阵按行顺序存储在内存中,即第一行的所有元素连续存储,接着是第二行,依此类推。
-
内存布局示例:
-
对于一个 2x3 矩阵:
-
行优先存储顺序为:
a, b, c, d, e, f
。
-
2. 列优先(Column-major)
-
定义:矩阵按列顺序存储在内存中,即第一列的所有元素连续存储,接着是第二列,依此类推。
-
内存布局示例:
-
同样的 2x3 矩阵:
-
列优先存储顺序为:
a, d, b, e, c, f
。
-
Eigen 中的存储顺序
-
Eigen 默认使用列优先存储(与 MATLAB 一致),但可以通过模板参数显式指定行优先。
-
示例代码:
cpp
#include <Eigen/Dense> using namespace Eigen; // 默认列优先(Column-major) Matrix<float, 3, 3> mat_col_major; // 显式指定行优先(Row-major) Matrix<float, 3, 3, RowMajor> mat_row_major;