2011-02-09 16 views
21

I official documentation comunica quanto segueMATLAB: differenze tra le versioni .mat

enter image description here. Ma ho notato che ci sono altre importanti differenze oltre a quelle indicate nella tabella sopra.

Ad esempio, il salvataggio di un array di celle con circa 6.000 elementi che occupa 176 MB della memoria in MATLAB mi dà i seguenti risultati a seconda che io uso -v7 o -v7.3:

  • Con -v7: dimensione file = 15 MB, e salvare & carico è veloce.
  • Con -v7.3: Dimensione file = 400 MB, e salvare & carico è molto lento (probabilmente in parte a causa della dimensione del file di grandi dimensioni).

Qualcun altro ha notato queste differenze?

Update 1: Come le risposte sottolineano, -v7.3 si basa su HDF5 e secondo Mathworks, "questo formato ha un significativo sovraccarico di stoccaggio", anche se non è chiaro se questo overhead è davvero a causa del formato stesso o dell'implementazione e della gestione di MATLAB di HDF5.

Update 2: @Andrew Janke ci indica this very helpful PDF (che a quanto pare non è disponibile in formato HTML sul web). Per maggiori dettagli, vedere i commenti nella risposta fornita da @ Amro.

Questo

tutto mi porta alla prossima domanda: Esistono alternative che combinano il meglio dei due mondi (ad esempio, l'efficienza del -v7 e la capacità di affrontare con file molto grandi su - v7.3)?

+0

Coloro che sono interessati, controlla questo recente articolo: [Migliorare salvare performan ce] (http: // undocumentedmatlab.com/blog/improvement-save-performance /) – Amro

risposta

9

La versione 7.3 di MAT-files utilizza il formato HDF5, questo formato ha un overhead di memoria significativo per descrivere il contenuto del file, in particolare per strutture e strutture nidificate complesse. Il suo vantaggio principale rispetto alle versioni precedenti dei file MAT è che consente di archiviare dati superiori a 2 GB su sistemi a 64 bit.

notare che sia v7 e v7.3 sono compressi e utilizzare la codifica Unicode (a differenza v6), eppure sono due completamente diversi formati ...

Riferimenti:

+2

Grazie a @Amro. Sono affascinato dal fatto che "overhead di storage significativo" significa che abbiamo bisogno di 400 MB invece di 15 MB per gli stessi dati, ma suppongo che questo spieghi tutto. –

+5

@AmV: la cosa con gli array di celle e strutture è che possono memorizzare tipi di dati eterogenei e che ogni tipo deve essere "descritto". Se si confrontano i due formati (v7/v7.3) usando una normale matrice "double" MATLAB (es: 'M = rand (3000,3000), salva v7.mat M -v7, salva v73.mat M -v7. 3'), otterresti file di dimensioni simili. D'altra parte, sostituisci la matrice sopra con un array di celle ('M = num2cell (M);') e vedrai una grande differenza nelle dimensioni ... – Amro

+6

Vedi anche http://www.mathworks.com/help /pdf_doc/matlab/matfile_format.pdf per una descrizione completa del formato di file MAT. Poiché HDF5 è un formato generico, alcune informazioni descrittive sui tipi vengono eseguite con stringhe nelle intestazioni (ad esempio "MATLAB_class", "double"). Nel formato MAT, i tipi di Matlab incorporati sono descritti con i cookie binari magici che si adattano in un paio di byte, quindi le intestazioni MAT possono essere piccole come 56 byte. Se sei su Linux o cygwin, "h5dump -p" e "od -c" ti daranno una visione delle intestazioni nei file v7.3. –

Problemi correlati