我正在写一个打开Matlab API引擎的c++代码。在演示文件Matlab_ROOT / extern / examples / eng_mat / engdemo.cpp中,它显示了如何将简单的一维c样式数组复制到mxArray:

mxArray *T = NULL; double time[10] = {};
T = mxCreateDoubleMatrix( 1,10,mxREAL);
memcpy((void*)mxGetPr(T), (void*)time, sizeof(time));

我可以理解这段代码;因此1d mxArray对象会线性存储元素。

但是,假设我有一个2d(或更多)的c数组和相同大小的mxArray:
double time[3][5];
mxArray *T;
T = mxCreateDoubleMatrix(3,5,mxREAL);

我想将c数组时间的元素复制到mxArray T中。我怎样才能做到这一点?我想如果我使用memcpy,那将取决于mxArray对象中元素存储的顺序。谢谢!

最佳答案

无论您的mxArray matlab的维数如何,始终将其作为连续的块存储在内存中(列的第一位)。也就是说,如果您的矩阵M是2 x 3

M = [ 11, 12, 13;
      21, 22, 23 ];

在内存中,Matlab将其存储为
[11, 21, 12, 22, 13, 23]

(如果执行M(:),将获得相同的顺序)。

因此,要将double[3][5]转换为mxArray,您必须发出几个memcpy命令:
double* ptr = mxGetPr( T );
for ( int i=0; i<3; i++ )
    memcpy( (void*)(ptr+i*5), (void*)time[i], 5*sizeof(double) );

关于c++ - 将多维C数组复制到Matlab mxArray类型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32219334/

10-10 12:40