【问题标题】:Compress only selected variables when saving to .mat保存到 .mat 时仅压缩选定的变量
【发布时间】:2014-08-16 11:38:39
【问题描述】:

我有两个变量datameta,我将它们保存在一个压缩的.mat 文件中(版本'-v7')。 data 变量通常是 800mb 未压缩,而meta 甚至可能不是 1mb。我有很多这些 .mat 文件,有时我只需要遍历所有 meta 变量。但是,由于文件已压缩,因此单独加载 meta 变量仍然需要大量时间,即与加载两个变量的时间相同。

是否可以选择性地压缩 .mat 文件中的特定变量(以加快加载速度)?替代数据设计?

注意:我已经有一个整体的单一meta,它基本上是较小的连接。但是,我需要放弃这种方法,因为它在尺寸和性能方面都不能很好地扩展。

【问题讨论】:

  • 不确定这是否真的达到了您想要的性能,但您是否尝试过matfile()?不幸的是,我现在无法测试......但这里是帮助链接:mathworks.com/help/matlab/ref/… NB 我知道这不是你问的。我只是建议一种替代方法。 :-)
  • 我一直在阅读您的链接,并且在一个非常缺乏信息的行中,文档说根据 .mat 文件的分块方式,加载单个变量应该花费更少的时间。现在,查看 HDF5 api 中的低级函数,我可以看到有一些方法可以设置布局,并且可能是单独分块 meta 的智能替代方案,以便执行单个缝隙的解压缩。跨度>
  • Speeding up save and load operations 文档中提到了 mat 文件的分块配置文件。有人有设置块配置文件的经验吗?
  • 再说一次,不确定您是否已经检查过这些内容,但这里有一个链接,其中包含有关在 MATLAB 中使用 HDF5 API 的典型示例:hdfgroup.org/HDF5/examples/api18-m.html
  • 所以,matfile() 不会提高加载速度(但这也取决于设置,我目前正在使用 SSD 进行测试)。从我之前的链接中,似乎可以直接在 .mat 文件上使用低级 HDF5 API,但事实并非如此。我没有时间也没有打算用纯 hdf5 学习/重写所有内容(mat 文件基于此)。我没有提到metadataset,这可能会影响它的存储方式,即不连续,强制解压缩/加载许多块。我将在保存之前测试dataset 的序列化。

标签: matlab load compression hdf5 mat


【解决方案1】:

要将选定的变量保存到myData.mat,请使用:

save myData var1 var2 var3 var4 var5

如果你想从myData文件加载var2,使用以下命令:

load myData var2

【讨论】:

  • 这正是我正在做的。但是,似乎加载整个文件或仅加载更小的meta 在时间方面几乎没有优势。出于这个原因,我推测较小的变量的存储方式会强制首先解压缩整个文件,而不是选择性地仅对 meta 所在的分区进行解压缩。
猜你喜欢
  • 2016-02-05
  • 1970-01-01
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
  • 2018-01-09
  • 1970-01-01
  • 1970-01-01
  • 2014-11-22
相关资源
最近更新 更多