2011-01-27 104 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。

相關問題