MATLAB:.mat版本之间的差异

Ame*_*ina 23 matlab hdf5 mat-file

官方文件规定如下:

在此输入图像描述.但我注意到除了上表中所述的其他重要区别之外.

例如,在MATLAB中保存一个占用176 MB内存的大约6,000个元素的单元格数组,根据我是使用-v7还是-v7.3,给出了以下结果:

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

有没有人注意到这些差异?

更新1:正如回复指出的那样,-v7.3依赖于HDF5并且根据Mathworks,"这种格式具有显着的存储开销",尽管不清楚这种开销是否真的是由于格式本身,还是由于MATLAB相反,实现和处理HDF5.

更新2:@Andrew Janke向我们指出了这个非常有用的PDF(显然在网上没有HTML格式).有关更多详细信息,请参阅@Amro提供的答案中的注释.

这一切都需要我下一个问题:是否有任何替代方案,结合了两者的优点(如效率-V7和处理大量文件的能力- 7.3版)?

Amr*_*mro 10

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

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

参考文献:

  • 有关MAT文件格式的完整说明,另请参见http://www.mathworks.com/help/pdf_doc/matlab/matfile_format.pdf.由于HDF5是一种通用格式,因此在标题中使用字符串来完成一些描述性类型信息(例如"MATLAB_class","double").在MAT格式中,内置的Matlab类型使用二进制魔术cookie来描述,这些cookie适合几个字节,因此MAT标头可以小到56个字节.如果您使用的是Linux或cygwin,"h5dump -p"和"od -c"将为您提供v7.3文件中标题的视图. (6认同)
  • @AmV:具有单元格和结构数组的东西是它们可以存储异构数据类型,并且每种类型都需要"描述".如果使用常规MATLAB"双"矩阵比较两种格式(v7/v7.3)(例如:`M = rand(3000,3000);保存v7.mat M -v7;保存v73.mat M -v7. 3`),你会得到类似的文件大小.另一方面,用单元格数组替换上面的矩阵(`M = num2cell(M);`),你会发现大小差别很大...... (5认同)
  • 谢谢@Amro.我很感兴趣的是,"显着的存储开销"意味着我们需要400 MB而不是15 MB才能获得完全相同的数据,但我想这可以解释一切. (2认同)