MATLAB:.mat 版本之间的差异
Posted
技术标签:
【中文标题】MATLAB:.mat 版本之间的差异【英文标题】:MATLAB: Differences between .mat versions 【发布时间】: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) 的文件非常大?
【问题讨论】:
有兴趣的可以看看这篇最近的文章:Improving save performance 【参考方案1】:7.3 版的 MAT 文件使用 HDF5 格式,这种格式有很大的存储开销来描述文件的内容,尤其是对于复杂的嵌套单元阵列和结构。与以前版本的 MAT 文件相比,它的主要优势在于它允许在 64 位系统上存储大于 2GB 的数据。
请注意,v7 和 v7.3 都经过压缩并使用 Unicode 编码(与 v6 不同),但它们是两种完全不同的格式...
参考文献:
MAT-File Preferences MAT-File Versions【讨论】:
谢谢@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。以上是关于MATLAB:.mat 版本之间的差异的主要内容,如果未能解决你的问题,请参考以下文章