【问题标题】:Size limit in MATLAB MEX-filesMATLAB MEX 文件中的大小限制
【发布时间】:2020-01-22 08:54:13
【问题描述】:

我是 Matlab mex 的新手。我正在尝试编写一个 mex 函数,该函数反过来将从 .cpp 文件中获取结构数据并在 Matlab 中使用它。

我知道 plhs 和 prhs 是指向数组的指针,它们分别保存输出数据和输入数据,每个元素都是 mxArray 类型的。

由于结构大小可能很大,plhs 和 prhs 数组是否有最大大小限制来保存数据?如果是这样,有哪些替代方法?

【问题讨论】:

标签: matlab mex matlab-deployment


【解决方案1】:

据我研究,可以处理的数组大小取决于编译 mex 文件时使用的 API。您可以通过在编译指令中添加相应的标志来选择 API。详细信息在“api-release specific API”下的matlab documentation

有 4 个选项可用:-R2017b (default)-R2018a-largeArrayDims-compatibleArrayDims

就数组大小-R2017b (default)-R2018a-largeArrayDims 使用Large-array-handling API,根据matlab mex documentation 可以处理超过231-1 的数组,并且,根据API documentation 应该能够处理最多 248-1 个元素的数组和最多 248-2 个的稀疏数组。

只有最后一个选项,-compatibleArrayDims 不会处理 231-1

以上的数组

除了数组大小之外,这些选项将改变一些数据类型的处理方式,尤其是复杂的类型和图形对象。

简而言之:

  • -R2017b (default):每个数组 248-1 个元素
  • -R2018a:每个数组 248-1 个元素
  • -largeArrayDims:每个数组 248-1 个元素
  • -compatibleArrayDims 每个数组 231-1 个元素

最后,如果您想处理更大的对象,我看到的解决方案是将您的结果写入代码 c 部分的文件(例如 .txt 或 .csv)中,然后在 matlab 部分中全部读回或成块。

希望这会有所帮助。我是新来的,所以如果我犯了错误或无视礼仪,请随时纠正我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    相关资源
    最近更新 更多