Eigen学习笔记(11)-存储顺序

原文: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中默认是列优先,而且大多库都是按照这个顺序的,默认的不失为较好的。

参考:

“Eigen教程(11)”

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章