在 MATLAB 中处理大型多维数组

Working with big multidimensional arrays in MATLAB

我有 260 GB 的数据来自基于代理的 NetLogo 模拟。数据已经以某种方式准备好,可以有效地用于可视化和分析。数据目前拆分为.mat文件,每个文件包含一个4维数组,大小为

270 x 2502 x 9 x 50

加载时,一个阵列使用 2.26 GB 内存。这大约需要 5 秒钟。总共有100多个文件。到目前为止,我的方法是遍历 .mat 文件,使用 load,使用数据(例如画一条曲线),使用 clearvars 并继续下一个文件。

不用说,这是一种太幼稚的方法,需要花费太多时间。 datastore 不是一个选项,因为我有 4 维数据和 .mat 文件。有没有其他方法可以更有效地处理这种情况?大多数时候我只使用这些数组中的一小部分,例如一维固定:

A(:, :, 1, :)

您可以使用 matfile 函数将 matfile 的子集加载到内存中,而无需加载整个文件。由于 .mat 在大多数情况下是 HDF5 格式的子集,因此它们的用法(几乎)是等价的。然而,由于 matlab 开发人员的疯狂技能,并且还取决于您的工作流程,它不能保证比您现在所做的更快。