一、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;