新浪博客

矩阵存储的两种方式——行优先与列优先

2014-04-10 10:54阅读:
例如:对于一个2*3(Row*Col)的矩阵A,按书写方式为矩阵赋值A= 1 2 3 4 5 6
按行优先存储,在内存当中是按照:1 2 3 4 5 6 ,这样的顺序存放的,意味着如果要在程序中访问矩阵A[3],则A[3]=4。
按列优先存储,在内存当中是按照:1 4 2 5 3 6 ,的顺序存放,这种情况下在程序中访问矩阵A[3],则A[3]=5。
很明显,这两种存储方式是不一样的。而在Matlab,CULA内部,矩阵默认是按列优先存放的,如果要使 用CULA device 函数,尤其当参数中提到leading dimension时,就必须考虑存储方式的问题,必要的时 候要对存储方式进行转换。
首先,要清楚一点:无论哪种存储方式,最终在内存中是顺序存储的。
行优先存储转列优先存储:
Row*Col 的矩阵A 总共有n=Row*Col个元素,是按照行优先存放的,接下来要转为列优先存储,思路:顺序访问内存中的数据,按照 矩阵存储的两种方式——行优先与列优先
如图顺序为结果矩阵Res赋值。
for(int i=0;i for(int j=0;j
Res[i*col+j]=A[j*col+i];
列优先存储转为行优先存储:
内存当中有n=row*col个数据,是按列存储的,可理解为有一个row*col矩阵,按列优先存储放在内存中,现需要转为按行优先存储。 矩阵存储的两种方式——行优先与列优先在往结果矩阵Res当中写数据时,要顺序访问原矩阵,按列访问结果矩阵内存单元,为Res矩阵赋值:
for(int i=0;i for(int j=0;j
Res[j*col+i]=A[i*col+j]; //这里A为顺序访问
熟悉转换过程后可以通过调用CULA Device函数来验证,步骤:
初始化矩阵A,为A赋值
将A转换为列优先存储
调用culaDeviceSgeTranspose 矩阵转置函数
CULA结果矩阵转换为按行优先存储
输出结果
验证完成!



我的更多文章

下载客户端阅读体验更佳

APP专享