我正在写一个打开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/