计算机软硬件(杂):列或者行优先顺序存储

wiki 在计算中,行优先顺序(Row-major order)和列优先顺序(column-major order)是在随机存取存储器 等线性存储器中存储多维数组的方法。顺序之间的区别在于数组的哪些元素在内存中是连续的。在行优先顺序中,行的连续元素彼此相邻。它对遍历数组时的性能也很重要,因为 CPU 处理顺序数据比处理非顺序数据更有效

常见的语言,NumPy的多维数据和Torch当前默认为行优先,可以推广至任意维。

1
2
3
4
5
6
7
8
>>> a = np.array([0,1,2],[3,4,5])
array([[ 0, 1, 2],
[ 3, 4, 5]])
>>> a[0]
array([0, 1, 2])
>>> b = a.flatten()
>>> b
array([ 0, 1, 2, 3, 4, 5])

文字描述,如数组: \[ A=\left[\begin{array}{lll} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{array}\right] \] 存储方式 \[ \begin{array}{|c|c|c|} \hline \text { 地址 } & \text { 行优先顺序 } & \text { 列优先顺序 } \\ \hline \mathbf{0} & a_{11} & a_{11} \\ \hline \mathbf{1} & a_{12} & a_{21} \\ \hline \mathbf{2} & a_{13} & a_{12} \\ \hline \mathbf{3} & a_{21} & a_{22} \\ \hline \mathbf{4} & a_{22} & a_{13} \\ \hline \mathbf{5} & a_{23} & a_{23} \\ \hline \end{array} \]