【问题标题】: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 部分中全部读回或成块。
希望这会有所帮助。我是新来的,所以如果我犯了错误或无视礼仪,请随时纠正我。