您的位置:首页 > 其它

列优先与行优先

2015-11-25 21:47 309 查看
对于一个矩阵,在内存中有两种存储顺序:(下面图和表格摘自 https://en.wikipedia.org/wiki/Row-major_order)
对于下面的矩阵:



可以有两种存储方式:左为列优先,右为行优先。
Column-major order

e.g., Fortran

AddressCoordinatesValue
0[1,1]11
1[2,1]21
2[1,2]12
3[2,2]22
4[1,3]13
5[2,3]23
Row-major order

e.g., C

AddressCoordinatesValue
0[1,1]11
1[1,2]12
2[1,3]13
3[2,1]21
4[2,2]22
5[2,3]23
顾名思义,列优先:优先按列存储,先存完第一列再存第二列,行优先同理。

C/C++中矩阵的存储为行优先,但Matlib中是列优先准则,在不同语言间读取数据时需要注意这点,同时在写Matlab时要尽量取一个二维数组的列,而不是行。

扩展到N维矩阵,列优先意味着存储时第一个维度先变化,即存储顺序为(0,0,0,...)、(1,0,0,...)、(max,0,0,...)、(0,1,0,...)、(1,1,0,...),

行优先意味着最后一个维度先变化。

p.s:caffe的Blob、numpy的array都是和C语言一样,是行优先的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: