我发现写入和读取本机mat文件格式变得非常非常慢,大小大约1G的数据结构.此外,我们还有其他非matlab软件,应该能够读写这些文件.所以我想找到一种替代格式来用于序列化matlab数据结构.理想情况下,这种格式会......
And*_*nke 18
简化数据结构并使用新的v7.3 MAT文件格式(HDF5的变体)可能实际上是最好的方法.HDF5格式已打开,并且已有适用于其他语言的I/O库.根据您的数据结构,它们可能比旧的二进制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数据结构并可移植到其他语言的备用文件格式可能是一项重大工作.我首先尝试对现有格式的使用进行较小的更改.