5

我有大量数据(>800Mb)需要很长时间才能加载到 Matlab 中,主要是因为它被分成每个 <20kB 的小文件。它们都是专有格式,我可以读取并加载到 Matlab 中,只是需要很长时间。

我正在考虑读取数据并将其写入某种二进制文件,这应该可以更快地进行后续读取(其中可能有很多,因此我需要加快速度)。

所以,我的问题是,将它们写入磁盘以尽可能快地再次读取它们的最佳格式是什么?

我想我可以选择使用 fwrite 编写,或者只是从 matlab 中保存变量。我想我更喜欢 fwrite 选项,所以如果需要,我可以从另一种包/语言中读取它们......

4

3 回答 3

4

查看最新版本的 MATLAB 使用的HDF5数据格式,作为 .mat 文件的基础格式。您可以使用该函数手动创建自己的 HDF5 文件hdf5write,并且可以从具有 HDF 绑定的任何语言访问此文件(大多数常见语言都可以,或者至少提供了一种集成可以调用 HDF5 库的 C 代码的方法)。

如果您的数据是数字的(并且具有相同的数据类型),您可能会发现很难超越普通二进制 (fwrite) 的性能。

于 2011-01-27T09:43:49.190 回答
2

二进制 mat 文件是最快的。只需使用

save myfile.mat <var_a> <var_b> ...
于 2011-01-27T09:30:22.070 回答
0

当我使用“-v6”选项保存 .mat 文件时,我的加载速度得到了惊人的提升,如下所示:

save(matlabTrainingFile, 'Xtrain', 'ytrain', '-v6'); 

这是我在测试中使用的矩阵的大小......

Attr Name                   Size                     Bytes  Class
==== ====                   ====                     =====  ===== 
  g  Xtest               1430x4000                45760000  double
  g  Xtrain              3411x4000               109152000  double
  g  Xval                1370x4000                43840000  double
  g  ytest               1430x1                      11440  double
  g  ytrain              3411x1                      27288  double
  g  yval                1370x1                      10960  double

...以及我们实现的性能改进:

变更前:

time to load the training data: 78 SECONDS!!! 
time to load validation data:   32
time to load the test data:     35

更改后:

time to load the training data: 0 SECONDS!!!
time to load validation data:   0
time to load the test data:     0

显然,它之所以如此有效的原因是旧版本 6 版本使用的压缩比新版本少。因此,您的文件大小会更大,但加载速度会更快。

于 2015-09-10T08:17:05.593 回答