【问题标题】:Is it possible to use matlab tables in mex code?是否可以在 mex 代码中使用 matlab 表?
【发布时间】:2015-03-24 13:37:18
【问题描述】:

我想在 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:)

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

【问题讨论】:

  • 如果您执行mxArray * matlabArray = prhs[0] 并且 prhs[0] 是一个表格会发生什么?它会引发错误还是您可以查看值?
  • 什么也没发生。在 VC++ 调试器中,您可以检查 matlabArray(例如作为浮点数),但它与我传递的不同。您还可以获取基础数据(通过 mxGetPr(matlabArray) 并将其分配给双精度向量,然后通过该向量(idx++)移动,但前几个字节中有 0(被视为 64 位双精度)...我意思是 prhs[0] 只是一个指针,那它为什么还要抛出错误呢?我通过了这个表:“table([-1,3.14,2.78]', categorical({'a', 'b', 'c' })'"
  • 你想对表做什么?您可能必须使用 mexCallMATLAB 调用 MATLAB 函数并将表 mxArray 作为输入传递以在 MATLAB 中进行处理。
  • @Navan,感谢您让我关注 mexCallMATLAB。问题的重点是找出 mex 库是否提供任何 C 功能来操作表,例如内连接或聚合或您可能想要对表执行的任何其他操作。我没有具体的用例...
  • 我认为没有任何特定于表的 mex 库函数。

标签: matlab mex


【解决方案1】:

prhs 是一个mxArray 指针数组,所以你的第一行代码是正确的。

使用mxIsClasshttps://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.ColumnNamedata 然后应该是一个普通的双矩阵。不幸的是,这种语法会创建数据的副本。没有记录在不制作副本的情况下访问(非标准)对象内部数据的方法。对于未记录的方式,请参阅:http://www.advanpix.com/2013/07/19/undocumented-mex-api/

【讨论】:

    【解决方案2】:

    目前无法在 mex 函数中访问 Matlab 表,具体如下:

    1. 您可以在 table 的 Matlab C/C++、Fortran 和 Python API 参考上执行 Ctrl+F 并仅参考文中的表格。我会将此作为没有提供 mxTable 类型的证据。

    2. Matlab 中的table 类型是作为Matlab 类实现的。实际上,您只需在命令窗口中键入edit table 即可查看表的所有源代码。这不适用于数值数组或元胞数组。

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

    【讨论】:

      猜你喜欢
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      • 2013-01-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-09
      相关资源
      最近更新 更多