【问题标题】:MATLAB: Differences between .mat versionsMATLAB:.mat 版本之间的差异
【发布时间】:2011-06-24 10:50:21
【问题描述】:

official documentation 声明如下:

。但我注意到,除了上表所述之外,还有其他重要的区别。

例如,根据我使用 -v7 还是 -v7.3:

  • 使用 -v7:文件大小 = 15 MB,保存和加载快速
  • 使用 -v7.3:文件大小 = 400 MB,保存和加载非常 (可能部分是因为文件很大)。

有其他人注意到这些差异吗?

更新 1:正如回复所指出的,-v7.3 依赖于 HDF5,并且根据 Mathworks,“这种格式具有很大的存储开销” ,虽然目前尚不清楚这种开销是否真的是由于格式本身,还是由于 MATLAB 实现和 HDF5 的处理。

更新 2:@Andrew Janke 将我们指向this very helpful PDF(显然在网络上没有 HTML 格式)。有关更多详细信息,请参阅@Amro 提供的答案中的 cmets。

这一切都把我带到了下一个问题:是否有任何替代方案结合了两全其美(例如 -v7 的效率和处理能力-v7.3) 的文件非常大?

【问题讨论】:

标签: matlab hdf5 mat-file


【解决方案1】:

7.3 版的 MAT 文件使用 HDF5 格式,这种格式有很大的存储开销来描述文件的内容,尤其是对于复杂的嵌套单元阵列和结构。与以前版本的 MAT 文件相比,它的主要优势在于它允许在 64 位系统上存储大于 2GB 的数据。

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

参考文献:

【讨论】:

  • 谢谢@Amro。我对“巨大的存储开销”意味着我们需要 400 MB 而不是 15 MB 来存储完全相同的数据这一事实很感兴趣,但我想这可以解释一切。
  • @AmV:元胞数组和结构体数组的特点是可以存储异构数据类型,每种类型都需要“描述”。如果您使用常规 MATLAB“双”矩阵(例如:M = rand(3000,3000); save v7.mat M -v7; save v73.mat M -v7.3)比较这两种格式(v7/v7.3),您将获得相似的文件大小。另一方面,将上面的矩阵替换为元胞数组(M = num2cell(M);),你会看到大小有很大的不同...
  • 有关 MAT 文件格式的完整说明,另请参阅 mathworks.com/help/pdf_doc/matlab/matfile_format.pdf。由于 HDF5 是一种通用格式,一些描述性类型信息是用标题中的字符串完成的(例如“MATLAB_class”、“double”)。在 MAT 格式中,内置的 Matlab 类型使用适合几个字节的二进制魔法 cookie 进行描述,因此 MAT 标头可以小至 56 个字节。如果您使用的是 Linux 或 cygwin,“h5dump -p”和“od -c”将为您提供 v7.3 文件中的标头视图。
  • @Andrew,这是一份非常有用的文档。我一直认为official HTML documentation中复制了PDF文档。也许是?我在 HTML 文档中找不到具有这种详细程度的 MAT 文件格式的解释。
  • 感谢 AMV。该 PDF 文件是我看到此信息的唯一地方。我不认为它在在线文档中。 MATLAB > 用户指南 > 外部接口 > “导入和导出 MAT 文件...”是我见过的最接近的,并且只讨论了它的公共 C 和 Fortran API。
猜你喜欢
  • 2015-12-13
  • 2012-12-07
  • 1970-01-01
  • 2015-08-08
  • 2012-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多