【发布时间】:2014-08-16 11:38:39
【问题描述】:
我有两个变量data 和meta,我将它们保存在一个压缩的.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 文件基于此)。我没有提到meta是dataset,这可能会影响它的存储方式,即不连续,强制解压缩/加载许多块。我将在保存之前测试dataset的序列化。
标签: matlab load compression hdf5 mat