【问题标题】:Memory issues with large amounts of data stored as nested cells in MATLAB在 MATLAB 中存储为嵌套单元格的大量数据存在内存问题
【发布时间】:2016-12-17 23:43:44
【问题描述】:

我有大量数据以嵌套单元格的形式存储在 .mat 文件中。我现在最大的问题是访问这些文件的加载时间,但我想知道根本问题是否是我想出了一种低效的数据存储方式,我应该将其重组为更小。

完整的文件由一个单元格数组组成:

Hemi{1,h} 其中h 有 52 个版本

.{n,p},其中n 有 85 个版本,p 最多有 100 个版本

.Variable 有 10 个变量,每个变量有 ~2500 个值

这个完整的文件占用了我所有的内存,所以我把它分部分保存,又名:

Hemi1.mat=Hemi{1,1} Hemi2.mat=Hemi{1,2}

等等

此应用程序的下一步是加载每个文件,确定其中的哪一部分是合适的解决方案(为此我需要 Hemi{1,h}.{n,p}.Var1、Hemi{1,h}.{n,p}.Var2 和 Hemi{1,h}.{n,p}.Var3,但我仍然需要跟踪其他变量),保存解决方案,然后关闭文件并移至下一个。

  1. 有没有更快的方法来加载这些文件?
  2. 问题不在于我的数据集,而在于我选择如何存储它?有更好的选择吗?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    这是相当多的数据。我有一些建议你可以研究一下。首先是看看您是否可以将数据类型更改为Categorical Objects 之类的东西。它们的内存效率更高。此外,如果您将字符串存储为最终数据,这可能会占用大量存储空间。

    其次,您可以查看HDF5 file storage。我听说这是存储结构化数据的好方法。

    您终于可以尝试将您的 {n,p} 数组转换为表结构。我不确定这是否更适合记忆,但表格很适合使用,它可能会对您有所帮助。 (根据您的 Matlab 版本,您可能没有表格:P)。

    我希望这会有所帮助!

    -凯尔

    【讨论】:

    • 我有桌子,但我不确定它们占用的空间是否更少。但是,表格格式会更兼容“数据存储”,例如?数据都是双精度浮点数。我想我可以将它们全部设为单精度?
    • 小心“假设”,如果您知道不会丢失精度,请仅将它们存储为单精度!此外,您可能会发现在不压缩的情况下更快地保存/加载数据,请参阅此处uk.mathworks.com/help/matlab/import_export/… 也就是说,如果您有足够的磁盘空间来保存不压缩的大文件!
    • 来自 Will 的链接:“7.3 版 MAT 文件使用基于 HDF5 的格式,将数据存储在压缩块中。从 7.3 版 MAT 文件加载部分变量所需的时间取决于如何该数据存储在一个或多个块中。包含要加载的数据的任何部分的每个块都必须完全解压缩才能访问数据。重新分块数据可以提高加载操作的性能。要重新分块数据,请使用HDF5 命令行工具,是 HDF5 发行版的一部分。”
    猜你喜欢
    • 2015-10-30
    • 1970-01-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-15
    • 1970-01-01
    相关资源
    最近更新 更多