2011-01-27 108 views
5

我有大量的数据(> 800Mb),需要将一个年龄加载到Matlab中,主要是因为它被分成了每个< 20kB的小文件。它们都是我可以读取并加载到Matlab中的专有格式,只是需要很长时间。在Matlab中加载数据的最快方法是什么?

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

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

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

回答

4

查找到HDF5数据格式,通过最新版本的MATLAB的作为.MAT文件的基本格式使用。您可以使用hdf5write函数手动创建自己的HDF5文件,并且可以使用任何具有HDF绑定(大多数常用语言,或至少提供可以调用HDF5库的C代码的方法)的语言来访问此文件。

如果您的数据是数值型(以及相同的数据类型),您可能会发现很难击败纯二进制(fwrite)的性能。

2

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

save myfile.mat <var_a> <var_b> ... 
+0

是的,我想可能是。是否有选项用于读取mat文件的mat文件? – mor22 2011-01-27 09:37:25

+1

是的,http://www.mathworks.com/help/techdoc/apiref/bqoqnz0.html#bqoqn5u – 2011-01-27 14:21:06

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版本中使用较少的压缩比的最新版本。 因此,您的文件大小将会变大,但它们会更快加载WAY。

相关问题