我想操纵一个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:)
并将一个表作为第一个参数传递?
3条答案
按热度按时间jhkqcmku1#
prhs
是一个mxArray
指针数组,所以第一行代码是正确的。使用
mxIsClass
(https://www.mathworks.com/help/matlab/apiref/mxisclass.html)判断输入数组是否为table
类型:要访问表的属性,请使用
mxGetProperty
(https://www.mathworks.com/help/matlab/apiref/mxgetproperty.html)函数:这相当于MATLAB命令
table.ColumnName
。data
应该是一个正规的二重矩阵。不幸的是,这种语法创建了数据的副本。没有记录的方法可以访问(非标准)对象内部的数据而不进行复制。有关未记录的方式,请参见:http://www.advanpix.com/2013/07/19/undocumented-mex-api/w9apscun2#
目前无法在基于以下内容的mex函数中访问Matlab表:
1.您可以在Matlab C/C++、Fortran和Python API Reference for
table
上执行Ctrl+F,并仅引用文本中的表。我认为这是没有提供mxTable类型的证据。table
类型是作为Matlab类实现的。实际上,您只需在命令窗口中键入edit table
,就可以看到表的所有源代码。对于数值数组或单元格数组,则不是这样。这似乎并不是mex支持的一个遗漏,因为主要的advantage of tables是他们组织数据很好。如果你有计算需求,这会促使你编写一个mex函数,你可能已经在Matlab中使用数值数组了。
w6lpcovy3#
这里有一个解决方案,可以通过使用MATLAB特定的函数来提取您需要的数据来解决MATLAB表访问的限制,如下所示:
在C mex代码中,你可以像这样定义
tbl_get_column
:在您的
mexFunction
中,您可以按以下方式访问数据:使用MATLAB R2021b进行测试