我想在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:)
并传递一个表作为第一个参数?
答案 0 :(得分:1)
目前无法根据以下内容访问mex函数中的Matlab表:
您可以在table
的Matlab C / C ++,Fortran和Python API参考上执行 Ctrl + F ,并且只能得出对文本中表格的引用。我认为这是没有提供mxTable类型的证据。
Matlab中的table
类型是作为Matlab类实现的。只需在命令窗口中键入edit table
,即可实际查看表的所有源代码。对于数字数组或单元数组,情况并非如此。
这似乎不是mex支持中的遗漏,因为主advantage of tables是他们很好地组织数据。如果你有计算要求会推动你编写一个mex函数,你可能已经在Matlab中使用数值数组了。
答案 1 :(得分:1)
prhs
是一个mxArray
指针数组,因此您的第一行代码是正确的。
使用mxIsClass
(https://www.mathworks.com/help/matlab/apiref/mxisclass.html)确定输入数组是否为table
类型:
if (mxIsClass(prhs[0],"table") { ... }
要访问表格的属性,请使用mxGetProperty
(https://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/