C++进阶笔记之Eigen:存储顺序(Storage orders)
Matrix类模板有六个模板参数,其中三个是强制性的(Scalar
,RowsAtCompileTime
和ColsAtCompileTime
)和三个是可选的(Options
,MaxRowsAtCompileTime
和MaxColsAtCompileTime
)。
Option
就是来指定Eigen矩阵或数组存放的方式,接下来依据官方文档来详解Eigen的存储顺序。
概要
矩阵和二维数组有两种不同的存储顺序:列优先和行优先。
本文介绍了这些存储顺序以及如何选择应使用的存储顺序。
列优先和行优先存储
矩阵的条目形成二维网格。然而,当矩阵存储在内存中时,条目必须以某种方式线性排列。有两种主要方法可以做到这一点,按行和按列。
果矩阵是逐行存储的,我们就说它是按行优先顺序存储的。首先存储整个第一行,然后是整个第二行,依此类推。考虑例如矩阵
A = [ 8 2 2 9 9 1 4 4 3 5 4 5 ] A = {\begin{bmatrix} 8 &2 &2 &9 \\ 9 &1 &4 &4 \\ 3 &5 &4 &5 \\ \end{bmatrix}} A=⎣⎡893