2011-01-27 12 views
5

Mam ogromną ilość danych (> 800Mb), które są w wieku, aby załadować do Matlab głównie dlatego, że jest podzielony na małe pliki każdy < 20kB. Wszystkie są w zastrzeżonym formacie, który mogę odczytać i wczytać do Matlaba, a to tylko tyle, że zajmuje to tyle czasu.Jaki jest najszybszy sposób na załadowanie danych w Matlab

Zastanawiam się nad odczytaniem danych i zapisaniem ich do jakiegoś pliku binarnego, który powinien uczynić go szybszym do późniejszych odczytów (z których może być ich wiele, dlatego potrzebuję przyspieszenia).

Moje pytanie brzmi: jaki byłby najlepszy format zapisu ich na dysk, aby odczytywać je tak szybko, jak to możliwe?

Domyślam się, że mam opcję pisania za pomocą fwrite lub po prostu zapisywanie zmiennych z MATLAB. Myślę, że wolałbym opcję fwrite, więc w razie potrzeby mogłem odczytać je z innego pakietu/języka ...

Odpowiedz

4

Szukaj w do formatu HDF5 danych, wykorzystywane przez najnowsze wersje MATLAB jak formatem bazowym dla plików .mat. Można ręcznie tworzyć własne pliki HDF5 przy użyciu funkcji hdf5write, a dostęp do tego pliku można uzyskać z dowolnego języka, który ma powiązania HDF (większość popularnych języków ma lub przynajmniej oferuje sposób na integrację kodu C, który może wywoływać bibliotekę HDF5).

Jeśli dane są numeryczne (i tego samego typu), może być trudno pokonać wydajność zwykłego pliku binarnego (fwrite).

+0

Dla mnie wygląda na to, że wygrywa format HDF5, wydawał się od 2 do 10 razy szybszy niż save() i podobne wydajność ładowania do plików 50Mb – mor22

+0

Prawdopodobnie porównano nieskompresowany HDF5 z skompresowanym HDF5 gzip, którego używa komenda 'save'. Możesz spróbować ['savefast'] (http://www.mathworks.com/matlabcentral/fileexchange/39721-save-mat-files-more-quickly), który jest po prostu otoką dla funkcji HDF5, która zachowuje się jak' save 'polecenie bez kompresji. – Daniel

2

Pliki z matami binarnymi są najszybsze. Wystarczy użyć

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

Tak, myślałem, że może być. Czy są dostępne opcje czytania plików mat poza Matlab? – mor22

+1

Tak, http://www.mathworks.com/help/techdoc/apiref/bqoqnz0.html#bqoqn5u –

0

ja osiągnąć niesamowite prędkości up w załadunku, gdy użyłem opcji „-v6” aby zapisać pliki .mat tak:

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

Oto wielkość macierzy, które użyłem w moim teście. ..

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 

... i ulepszenia wydajności, które osiągnęliśmy:

Przed zmianą:

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

Po zmianie:

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

Widocznie powód powód to działa tak dobrze, że stara wersja 6 wersja używana mniej niż kompresja nowych wersjach. Twoje rozmiary plików będą większe, ale szybciej załadują WAY.

Powiązane problemy