原文:Eigen官网-Storage orders
对于矩阵和二维数组,有两种存储顺序:列优先和行优先。
1. 行优先和列优先的存储
矩阵的项构成一个二维网格。然而,当矩阵存储在内存中时,条目必须以某种方式线性排列。有两种主要的方法,按行和按列。
假设矩阵:
A = 8,2,2,9
9,1,4,4
3,5,4,5
row-major order:按一行一行地进行存储,首先存储第一行,然后存储第二行,如此进行,
8 2 2 9 9 1 4 4 3 5 4 5
column-major order:按一列一列地进行存储,首先存储第一列,然后存储第二列,如此进行,
8 9 3 2 1 5 2 4 4 9 4 5
2. Eigen中的存储顺序
Matrix类有六个模板参数,其中Options
参数设置为RowMajor
则按行优先顺序进行存储,如果设置为ColMajor
则按列优先顺序进行存储。
Eigen中的默认存储顺序是column-major。
如果矩阵或数组使用了某类存储顺序,也可硬将其分配给使用了另一类存储顺序的矩阵和数组,Eigen将会自动进行重新排序。
3. 存储顺序的选择
对于存储顺序的选择,没有一个简单的答案,这依赖于你的应用:
- 如果要和其他库合作开发,为了转化方便,可以选择同样的存储方式。
- 应用中涉及大量行遍历操作,应该选择行优先,寻址更快。反之亦然。
- Eigen中默认是列优先,而且大多库都是按照这个顺序的,默认的不失为较好的。
参考:
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容