2011-02-09 33 views
21

Los official documentation indica lo siguiente:MATLAB: Las diferencias entre las versiones .mat

enter image description here. Pero me he dado cuenta de que existen otras diferencias importantes además de las indicadas en la tabla anterior.

Por ejemplo, guardar un conjunto de celdas con cerca de 6.000 elementos que ocupa 176 MB de memoria de en MATLAB me da los siguientes resultados en función de si utilizo -v7 o -v7.3:

  • Con -v7: tamaño del archivo = 15 MB, y guardar & carga es rápida.
  • Con -v7.3: Tamaño del archivo = 400 MB, y ahorrar & carga es muy lenta (probablemente en parte debido al gran tamaño del archivo).

¿Alguien más ha notado estas diferencias?

Actualización 1: Como las respuestas señalan, -v7.3 se basa en HDF5 y de acuerdo con Mathworks, "este formato tiene una significativa sobrecarga de almacenamiento", aunque no está claro si esta sobrecarga es realmente debido al formato en sí mismo, oa la implementación y manejo de HDF5 de MATLAB.

Actualización 2: @Andrew Janke nos señala this very helpful PDF (que aparentemente no está disponible en formato HTML en la web). Para obtener más detalles, consulte los comentarios en la respuesta proporcionada por @Amro.

Este

todo me lleva a la siguiente pregunta: ¿hay posibilidades de que combinan lo mejor de ambos mundos (por ejemplo, la eficiencia de -v7 y la capacidad de tratar con archivos muy grandes de - v7.3)?

+0

Los interesados ​​pueden ver este artículo reciente: [Mejorando el rendimiento de la seguridad ce] (http: // undocumentedmatlab.com/blog/improving-save-performance /) – Amro

Respuesta

9

La versión 7.3 de los archivos MAT utiliza el formato HDF5, este formato tiene una sobrecarga de almacenamiento significativa para describir el contenido del archivo, especialmente para cellarrays complejos complejos y estructuras. Su principal ventaja sobre las versiones anteriores de los archivos MAT es que permite almacenar datos de más de 2 GB en sistemas de 64 bits.

Tenga en cuenta que tanto v7 y v7.3 se comprimen y utilizar la codificación Unicode (a diferencia de v6), sin embargo, son dos formatos completamente diferentes ...

Referencias:

+2

Gracias @Amro. Estoy intrigado por el hecho de que "una sobrecarga significativa de almacenamiento" significa que necesitamos 400 MB en lugar de 15 MB para los mismos datos exactos, pero supongo que eso lo explica todo. –

+5

@AmV: lo que ocurre con las matrices de celdas y estructuras es que pueden almacenar tipos de datos heterogéneos y cada tipo debe ser "descrito". Si compara los dos formatos (v7/v7.3) usando una matriz MATLAB "doble" normal (por ejemplo: 'M = rand (3000,3000); guarde v7.mat M -v7; guarde v73.mat M -v7. 3'), obtendrías tamaños de archivo similares. Por otro lado, reemplace la matriz anterior con una matriz de celdas ('M = num2cell (M);') y verá una gran diferencia de tamaño ... – Amro

+6

Vea también http://www.mathworks.com/help /pdf_doc/matlab/matfile_format.pdf para una descripción completa del formato de archivo MAT. Como HDF5 es un formato de propósito general, se realiza cierta información de tipo descriptivo con cadenas en los encabezados (por ejemplo, "MATLAB_class", "double"). En el formato MAT, los tipos incorporados de Matlab se describen con cookies mágicas binarias que caben en un par de bytes, por lo que los encabezados MAT pueden ser tan pequeños como 56 bytes. Si está en Linux o cygwin, "h5dump -p" y "od -c" le darán una vista de los encabezados en los archivos v7.3. –

Cuestiones relacionadas