Matlab Mat文件格式的替代品

时间:2012-09-26 00:50:37

标签: matlab

我发现写入和读取本机mat文件格式变得非常非常慢,大小大约为1G的数据结构。此外,我们还有其他非matlab软件,应该能够读写这些文件。所以我想找到一种替代格式来用于序列化matlab数据结构。理想情况下,这种格式会......

  1. 能够将任意matlab结构表示为文件。
  2. 比mat文件具有更快的I / O.
  3. 拥有其他语言的I / O库,如Java,Python和C ++。

2 个答案:

答案 0 :(得分:18)

简化数据结构并使用新的v7.3 MAT文件格式(HDF5的一种变体)可能实际上是最好的方法。 HDF5格式已打开,并且已有适用于其他语言的I / O库。根据您的数据结构,它们可能比旧的二进制mat文件更快。

  • 简化您正在保存的数据结构,更喜欢大型基元数组到复杂的容器结构。
  • 如果您的数据结构仍然很复杂,请尝试关闭压缩。
  • 使用“-v7.3”
  • 尝试使用v7.3 MAT文件格式
  • 如果使用网络文件系统,请考虑在快速本地驱动器上保存并加载到临时目录并复制到网络或从网络复制

对于大型数据结构,您的MAT文件I / O速度可能更多地取决于您要写出的数据的内部结构,而不是结果MAT文件本身的大小。 (根据我的经验,这通常是缓慢MAT文件的主要因素。)当你说“任意Matlab结构”时,这表明你可能正在使用单元格,结构或对象来制作复杂的数据结构。这会减慢MAT I / O,因为MAT文件I / O中存在每个数组的开销,而单元格和结构数组(容器类型)的成员都计为单独的数组。例如,存储在cellstr中的5,000个字符串比存储在2-D char数组中的相同5,000个字符串慢得多。对象的开销更大。作为测试,尝试写出一个仅包含1 GB原始随机uint8数组的1 GB文件,并查看需要多长时间。从那里,看看您是否可以简化数据以减少总的mxarray计数,即使这意味着重新整形它以进行序列化。 (我对此的体验主要是使用v7格式;较新的HDF5格式可能会减少每个元素的开销。)

如果您的数据文件存在于网络上,您还可以尝试对快速本地驱动器上的临时文件执行保存和加载操作,并单独使用复制操作在网络之间来回移动它们。至少在Windows网络上,我看到这样做的速度提高了2倍。可能由于优化,全文件复制操作可以做到MAT I / O代码不能。

提出支持完全任意Matlab数据结构并可移植到其他语言的备用文件格式可能需要付出巨大努力。我首先尝试对现有格式的使用进行较小的更改。

答案 1 :(得分:3)

mat格式已经改变了Matlab版本。 v7.3使用HDF5格式,它具有内置压缩和其他功能,可能需要很长时间才能读/写。但是,您可以强制Matlab使用更快(但可能需要更多空间)的先前格式。

见这里:

http://www.mathworks.com/help/matlab/import_export/mat-file-versions.html