【发布时间】:2015-02-13 00:56:34
【问题描述】:
在我的项目中,我在CUDA\c++ 中执行了一些计算,然后我使用来自 Matlab (mxCreateNumericArray) 的 Matrix API 将我的数组作为矩阵保存到 .mat 文件中。在c++ 中,我使用本地基于行的索引,但是Matlab 函数假定基于列的顺序。有没有办法快速解决这个问题?我可以将基于行的转换为基于列的,但不想这样做(以获得更高的性能)。这是一段 c++ 代码(带有 3x3 简单数组):
float data[9] = { 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0 };
MATFile *pmat;
const char *file = "mattest.mat";
pmat = matOpen(file, "w");
const mwSize dims[] = { 3, 3 };
mxArray *pa1 = mxCreateNumericArray(2, dims, mxSINGLE_CLASS, mxREAL);
memcpy((void *)(mxGetPr(pa1)), (void *)data, 3*3*sizeof(float));
matPutVariable(pmat, "LocalDouble", pa1);
mxDestroyArray(pa1);
所以,这里的矩阵是
a={1 2 3
4 5 6
7 8 9}
它存储在数组data(行主要顺序)中。但结果,mattest.mat 文件中的矩阵是
a={1 4 7
2 5 8
3 6 9}
对于对称阵列快速换位作品。但是我的阵列不是对称的并且比较大。
【问题讨论】: