MATLAB MEX 文件中的大小限制
Size limit in MATLAB MEX-files
我是 Matlab mex 的新手。我正在尝试编写一个 mex 函数,该函数反过来将从 .cpp 文件中获取结构数据并在 Matlab 中使用它。
我才知道 plhs 和 prhs 是指向数组的指针,数组分别保存输出数据和输入数据,每个元素都是 mxArray 类型。
由于结构大小可能很大,plhs 和 prhs 数组保存数据是否有最大大小限制?如果是这样,有哪些替代方法?
据我研究,可以处理的数组大小取决于 API 您编译 mex 文件所使用的。您可以通过在编译指令中添加相应的标志来选择 API。详细信息在 "api-release specific API" 下的 matlab documentation 中。
有 4 个选项可用:-R2017b (default)
-R2018a
-largeArrayDims
和 -compatibleArrayDims
。
在数组大小方面 -R2017b (default)
-R2018a
和 -largeArrayDims
使用 Large-array-handling API 根据 matlab mex documentation can handle arrays over 231-1 and, according to the 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 部分读回它们整体或分块。
希望这对您有所帮助。我是新来的,所以如果我犯了错误或无视礼仪,请随时纠正我。
我是 Matlab mex 的新手。我正在尝试编写一个 mex 函数,该函数反过来将从 .cpp 文件中获取结构数据并在 Matlab 中使用它。
我才知道 plhs 和 prhs 是指向数组的指针,数组分别保存输出数据和输入数据,每个元素都是 mxArray 类型。
由于结构大小可能很大,plhs 和 prhs 数组保存数据是否有最大大小限制?如果是这样,有哪些替代方法?
据我研究,可以处理的数组大小取决于 API 您编译 mex 文件所使用的。您可以通过在编译指令中添加相应的标志来选择 API。详细信息在 "api-release specific API" 下的 matlab documentation 中。
有 4 个选项可用:-R2017b (default)
-R2018a
-largeArrayDims
和 -compatibleArrayDims
。
在数组大小方面 -R2017b (default)
-R2018a
和 -largeArrayDims
使用 Large-array-handling API 根据 matlab mex documentation can handle arrays over 231-1 and, according to the 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 部分读回它们整体或分块。
希望这对您有所帮助。我是新来的,所以如果我犯了错误或无视礼仪,请随时纠正我。