Какой самый быстрый способ загрузки данных в Matlab - PullRequest
5 голосов
/ 27 января 2011

У меня огромное количество данных (> 800 МБ), для загрузки которых в Matlab требуется много времени, главным образом потому, что они разбиты на крошечные файлы каждый размером <20 КБ.Все они в собственном формате, который я могу читать и загружать в Matlab, просто это занимает так много времени. </p>

Я думаю о том, чтобы прочитать данные и записать их в какой-то двоичный файл,сделать это быстрее для последующих чтений (которых может быть много, поэтому мне нужно ускорение).

Итак, мой вопрос: какой будет лучший формат для записи их на диск, чтобы сделать их повторное чтение максимально быстрым?

Я думаю, у меня есть возможность записи с использованием fwriteили просто сохраняя переменные из Matlab.Я думаю, что предпочел бы опцию fwrite, поэтому при необходимости я мог бы прочитать их из другого пакета / языка ...

Ответы [ 3 ]

4 голосов
/ 27 января 2011

Посмотрите на формат данных HDF5 , используемый в последних версиях MATLAB в качестве основного формата для файлов .mat.Вы можете вручную создавать свои собственные файлы HDF5 с помощью функции hdf5write, и к этому файлу можно получить доступ с любого языка, имеющего привязки HDF (большинство распространенных языков делают или, по крайней мере, предлагают способ интеграции кода C)это может вызвать библиотеку HDF5).

Если ваши данные являются числовыми (и того же типа данных), вам может быть сложно превзойти производительность обычного двоичного файла (fwrite).

2 голосов
/ 27 января 2011

Бинарные mat-файлы являются самыми быстрыми.Просто используйте

save myfile.mat <var_a> <var_b> ...
0 голосов
/ 10 сентября 2015

Я достиг удивительного ускорения загрузки, когда использовал опцию '-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 использовала меньшее сжатие, чем новые версии.Таким образом, ваши размеры файлов будут больше, но они будут загружаться ПУТЬ быстрее.

...