对于一个矩阵,在内存中有两种存储顺序:(下面图和表格摘自 https://en.wikipedia.org/wiki/Row-major_order)
对于下面的矩阵:
可以有两种存储方式:左为列优先,右为行优先。
|
|
顾名思义,列优先:优先按列存储,先存完第一列再存第二列,行优先同理。
C/C++中矩阵的存储为行优先,但Matlab中是列优先准则,在不同语言间读取数据时需要注意这点,同时在写Matlab时要尽量取一个二维数组的列,而不是行。
扩展到N维矩阵,列优先意味着存储时第一个维度先变化,即存储顺序为(0,0,0,...)、(1,0,0,...)、(max,0,0,...)、(0,1,0,...)、(1,1,0,...),
行优先意味着最后一个维度先变化。
p.s:在处理数据时,说明数据的顺序需要表明1)维度安排和 2)是否是行\列优先,这两个信息缺一不可。
p.s:caffe的Blob、numpy的array、OpenCV的Mat都是和C语言一样,是行优先的。
p.s:貌似只有Matlab中的矩阵是列优先。