2011-01-27 18 views
5

Tengo una gran cantidad de datos (> 800 Mb) que tarda una era en cargar en Matlab principalmente porque se divide en pequeños archivos cada < 20kB. Todos están en un formato patentado que puedo leer y cargar en Matlab, es solo que lleva tanto tiempo.¿Cuál es la forma más rápida de cargar datos en Matlab

Estoy pensando en leer los datos y escribirlos en algún tipo de archivo binario que debería hacer que sea más rápido para lecturas posteriores (de las cuales puede haber muchas, por lo tanto, necesito una aceleración).

Entonces, mi pregunta es, ¿cuál sería el mejor formato para escribirlos en el disco para que vuelvan a leerlos lo más rápido posible?

Supongo que tengo la opción de escribir usando fwrite, o simplemente guardando las variables de matlab. Creo que preferiría la opción fwrite así que si es necesario, podría leerlos desde otro paquete/idioma ...

Respuesta

4

Buscar en el formato de datos HDF5, utilizado por las versiones recientes de MATLAB como el formato de archivos subyacente para .mat. Puede crear manualmente sus propios archivos HDF5 utilizando la función hdf5write, y se puede acceder a este archivo desde cualquier idioma que tenga enlaces HDF (la mayoría de los lenguajes comunes, o al menos ofrecen una forma de integrar el código C que puede llamar a la biblioteca HDF5).

Si sus datos son numéricos (y del mismo tipo de datos), puede que le resulte difícil superar el rendimiento del binario simple (fwrite).

+0

Para mí, parece que el formato HDF5 gana, parecía entre 2 y 10 veces más rápido que guardar() y similar rendimiento para la carga de archivos de 50Mb – mor22

+0

Probablemente haya comparado HDF5 sin comprimir con gzip comprimido HDF5 que usa el comando 'save'. Puedes probar ['savefast'] (http://www.mathworks.com/matlabcentral/fileexchange/39721-save-mat-files-more-quickly) que es básicamente un contenedor para las funciones HDF5 que se comporta como' save 'comando sin compresión. – Daniel

2

Los archivos mat binarios son los más rápidos. Sólo tiene que utilizar

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

sí, pensé que podría ser. ¿Hay opciones para leer archivos de tapete al costado de Matlab? – mor22

+1

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

0

que logra una velocidad sorprendente en carga cuando utilicé la opción '-v6' para guardar los archivos .mat así:

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

Aquí es el tamaño de las matrices que he usado en mi prueba. ..

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 

... y las mejoras de rendimiento que hemos logrado:

Antes del cambio:

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

Después del cambio:

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

Al parecer, la razón la razón por la que esto funciona tan bien es que la antigua versión de la versión 6 utiliza menos compresión al que las nuevas versiones. Por lo tanto, los tamaños de sus archivos serán más grandes, pero se cargarán mucho más rápido.

Cuestiones relacionadas