是否可以在mex代码中使用matlab表?

时间:2015-03-24 13:37:18

标签: matlab mex

我想在mex代码中操作一个matlab表(http://se.mathworks.com/help/matlab/tables.html)。这可能吗?

例如,要操作mex代码中的数组,可以调用:

mxArray * matlabArray = prhs[0] ;// if matlabArray was the first argument to the mex function;

可以做一些像

这样的事情
mxTable * matlabTable  = prhs[0] ; //mxTable does not actually exist... but I would like it to:)

并传递一个表作为第一个参数?

2 个答案:

答案 0 :(得分:1)

目前无法根据以下内容访问mex函数中的Matlab表:

  1. 您可以在table的Matlab C / C ++,Fortran和Python API参考上执行 Ctrl + F ,并且只能得出对文本中表格的引用。我认为这是没有提供mxTable类型的证据。

  2. Matlab中的table类型是作为Matlab类实现的。只需在命令窗口中键入edit table,即可实际查看表的所有源代码。对于数字数组或单元数组,情况并非如此。

  3. 这似乎不是mex支持中的遗漏,因为主advantage of tables是他们很好地组织数据。如果你有计算要求会推动你编写一个mex函数,你可能已经在Matlab中使用数值数组了。

答案 1 :(得分:1)

prhs是一个mxArray指针数组,因此您的第一行代码是正确的。

使用mxIsClasshttps://www.mathworks.com/help/matlab/apiref/mxisclass.html)确定输入数组是否为table类型:

if (mxIsClass(prhs[0],"table") { ... }

要访问表格的属性,请使用mxGetPropertyhttps://www.mathworks.com/help/matlab/apiref/mxgetproperty.html)功能:

mxArray* data = mxGetProperty(prhs[0],0,"ColumnName");

这相当于MATLAB命令table.ColumnName。然后data应该是一个普通的双矩阵。不幸的是,这种语法会创建数据的副本。没有记录的方法来访问(非标准)对象内的数据而不进行复制。有关未记录的方式,请参阅:http://www.advanpix.com/2013/07/19/undocumented-mex-api/