matlab - MATLAB MEX 文件的大小限制

标签 matlab mex matlab-deployment

我是 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/

相关文章:

c++ - Matlab 函数和 parallel_invoke

matlab - 在运行时为 Mac 和 Linux 获取已部署的 Matlab 应用程序的位置

c - MexFile 导致 "Assertion detected"错误 - mexfiles 中的 memcpy 有问题吗?

javac 无效标志

matlab - 在 Matlab 中用 feedforwardnet 模拟默认 patternnet?

java - MATLAB:处理 java.lang.String

matlab - 水平连接字符串元胞数组

python - 在 matlab 和 python 中创建迭代数组

c++ - 如何在 C++ 中使用 mex.h

c++ - C++ 中的 MATLAB 张量索引