使用MATLAB中的MEX文件访问存储在单元阵列内的矩阵

Ber*_* U. 3 c matlab mex

我目前正在编写一个MEX函数,它必须在MATLAB中使用单元数组.MEX文件用C语言编写.

本质上,我的函数的输入将是一个单元格数组,其中每个条目都是具有实数值的数字矩阵.一个简单的例子是:

C = cell(1,2);
C{1} = ones(10,10);
C{2} = zeros(10,4);
Run Code Online (Sandbox Code Playgroud)

我希望能够访问我的MEX文件中的数字数组C {1}和C {2}.理想情况下,我想这样做而不必在我的MEX文件中创建数据的第二个副本(即获取它们的指针).

使用前面的示例,我目前的方法如下:

/* declare a pointer variable to the incoming cell array after it is passed to the MEX function */
mxArray C_CELL = (mxArray *) mxGetData(prhs[0]) 

/* declare  a 2 x 1 array of pointers to access the cell array in C */
double *myarray[2] //

/* point towards the contents of C_CELL */
myarray[0] = mxGetPr(C_CELL[0])
myarray[1] = mxGetPr(C_CELL[1])
Run Code Online (Sandbox Code Playgroud)

不幸的是,这似乎产生了"无效使用未定义类型'struct mxArray_tag'"错误.

Dav*_*nan 6

您需要使用mxGetCell提取单元格数组的内容.

mxArray *cellArray[2];
cellArray[0] = mxGetCell(prhs[0], 0);
cellArray[1] = mxGetCell(prhs[0], 1);
Run Code Online (Sandbox Code Playgroud)