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 版本之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

虽然找到2张图片之间的差异,但OpenCV差异大于预期

如何获得 2 个 cv::Mat 对象之间的绝对差异

如何在 Matlab 中获得 2 个图像之间的差异?

matlab如何测试测量值之间的显着差异?

如何比较matlab中不同时间戳的.mat文件

显示 cv2 Mat 的差异