我是 Matlab mex 新手。我正在尝试编写一个 mex 函数,该函数将从 .cpp 文件中获取结构数据并在 Matlab 中使用它。
我开始知道 plhs 和 prhs 是指向数组的指针,该数组分别保存输出数据和输入数据,每个元素的类型为 mxArray。
由于结构体大小可能很大,plhs 和 prhs 数组保存数据是否有最大大小限制?如果是这样,有哪些替代方法?
最佳答案
据我研究,可以处理的数组大小取决于您编译 mex 文件所使用的 API。您可以通过在编译指令中添加相应的标志来选择API。详情见matlab documentation在“api-发布特定 API”下。
有 4 个可用选项:-R2017b(默认)
-R2018a
-largeArrayDims
和 -兼容ArrayDims
。
就数组大小而言 -R2017b(默认)
-R2018a
和 -largeArrayDims
使用 Large-array-handling API,根据matlab mex documentation可以处理超过 231-1 的数组,并且根据 API documentation应该能够处理最多 248-1 个元素的数组和最多 248-2 的稀疏数组。
只有最后一个选项,-兼容ArrayDims
不会处理超过 231-1
除了数组大小之外,这些选项还将改变一些数据类型的处理方式,尤其是复杂类型和图形对象。
简而言之:
-R2017b(默认)
:每个数组 248-1 个元素-R2018a
:每个数组 248-1 个元素-largeArrayDims
:每个数组 248-1 个元素-兼容ArrayDims
每个数组 231-1 个元素
最后,如果您想处理更大的对象,我看到的解决方案是将您的结果写入代码的 c 部分的文件(例如 .txt 或 .csv)中,然后在整个 matlab 部分中读回它们或成 block 。
关于matlab - MATLAB MEX 文件的大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59855838/