MATLAB:.mat 版本之间的区别

26

官方文档中指出:

enter image description here。 但是我注意到,除了上表中所述的差异之外,还有其他重要的差异。

例如,将大约有6,000个元素且占用176 MB内存的cell数组保存在MATLAB中,根据我使用-v7-v7.3而不同,会得到以下结果:

  • 使用-v7: 文件大小为15 MB,save和load速度
  • 使用-v7.3: 文件大小为400 MB,save和load速度非常 (可能部分原因是因为文件太大)。

是否有人注意到这些差异?

更新1 :随着答复的指出, -v7.3 依赖于HDF5,根据Mathworks的说��,“此格式具有显着的存储开销”,尽管目前还不清楚这种开销真正是由于格式本身,还是由于MATLAB处理和处理HDF5的方式。

更新2 :@Andrew Janke将我们指向这个非常有用的PDF(显然在网络上没有HTML格式)。有关详细信息,请参见@Amro提供的答案中的评论。

这一切让我想到了下一个问题:是否有任何替代方案,可以兼具-v7的效率和能够处理非常大的-v7.3文件的能力?


有兴趣的人可以查看这篇最近的文章:提高保存性能 - Amro
1个回答

14

7.3 版本的 MAT 文件使用 HDF5 格式,这种格式在描述文件内容时具有显着的存储开销,尤其是对于复杂嵌套的 cell 数组和结构体。与 MAT 文件的先前版本相比,它的主要优势在于允许在 64 位系统上存储大于 2GB 的数据。

请注意,v7 和 v7.3 都经过压缩并使用 Unicode 编码(不同于 v6),但它们是两种完全不同的格式...

参考资料:


2
谢谢@Amro。我对“显着的存储开销”这一事实感到好奇,这意味着我们需要400 MB而不是15 MB来存储完全相同的数据,但我想这解释了一切。 - Amelio Vazquez-Reina
5
使用单元数组和结构数组的问题在于它们可以存储异构数据类型,每种类型都需要被“描述”。如果您使用常规的 MATLAB “double”矩阵(例如:M = rand(3000,3000); save v7.mat M -v7; save v73.mat M -v7.3)来比较两种格式(v7/v7.3),您将获得类似的文件大小。另一方面,将上述矩阵替换为单元数组(M = num2cell(M);),您将看到一个很大的文件大小差异... - Amro
7
请参阅 http://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf 以获取MAT文件格式的完整描述。由于HDF5是通用格式,因此某些描述性类型信息是通过标题中的字符串完成的(例如“MATLAB_class”,“double”)。在MAT格式中,Matlab内置类型使用适合于几个字节的二进制魔术标识进行描述,因此MAT头文件可以尽可能小,最小为56个字节。如果您使用Linux或cygwin,则"h5dump -p" 和 "od -c" 命令会显示v7.3文件中头文件的视图。 - Andrew Janke
@AndrewJanke 那个 PDF 文件中写着“level 5”。这是否对应于 Matlab v6 文件? - Johannes Schaub - litb
@JohannesSchaub-litb 有一些版本号的重叠,但是是的,MAT-files 5级可以使用 -v6-v7保存/加载标志,而4级对应 -v4 标志。请注意,基于HDF5的MAT文件(-v7.3标志)在该PDF文档中未被讨论。所以如果你使用 -v6-v7 标志保存MAT文件,实际上你会在文件开头得到以下标头 MATLAB 5.0 MAT-file, Platform: PCWIN, Created on: ... 。使用 -v7.3,您会得到 MATLAB 7.3 MAT-file, Platform: PCWIN, Created on: ... HDF5 schema 1.00。-v4 不会产生任何文本标题。 - Amro
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接