2011-02-09 35 views
21

official documentation状態:MATLAB:.MATのバージョンとの違い以下

enter image description here。しかし、私は、上記の表に記載されている以外の重要な違いがあることに気付きました。

:MATLABにおけるメモリの 176メガバイトを占めている約6000の要素を持つセル配列を保存たとえば

は、私が-v7または-v7.3を使用するかどうかに応じて、以下の結果を私に与えます

    -v7
  • :ファイルサイズ= 15メガバイト、および&負荷を保存するには、速いです。 -v7.3
  • :ファイルサイズ= 400メガバイト、および&負荷を保存するには、(おそらく一部であるため、大きなファイルサイズの)非常に遅いです。

これらの違いに気づいた人はいますか?

アップデート1:返信が指摘するように、-v7.3はHDF5に依存しており、このオーバーヘッドが本当にあるならば、それは明らかではないが、Mathworks社によると、「このフォーマットは、重要なストレージ・オーバーヘッドを持っています」フォーマット自体やMATLABの実装とHDF5の処理が原因です。

更新2:@Andrew Jankeは、(ウェブ上ではHTML形式では利用できないようです)を示しています。詳細については、@Amroが提供する答えのコメントを参照してください。

これは、すべての次の質問に私を取る:例えば-v7の効率性との非常に大きなファイルを扱う能力の両方の長所を組み合わせた任意の選択肢(あります - V7.3は、)?

+0

興味のある方は、この最近の記事をチェックしてください:[保存パフォーマンスの向上(http://文書化されていない。com/blog/improve-save-performance /) – Amro

答えて

9

バージョン7.3のMATファイルでは、HDF5フォーマットを使用しています。このフォーマットは、ファイルの内容を記述するために、特に複雑なネストされたセル配列や構造の場合には、以前のバージョンのMATファイルよりも主な利点は、64ビットシステムに2GBを超えるデータを格納できることです。

V7とV7.3の両方が圧縮され、(V6とは異なり)Unicodeエンコーディングを使用することに注意してください、まだ彼らは2つの完全に異なるフォーマットである...

参照:

+2

ありがとう@Amro。私は、「重要なストレージオーバーヘッド」というのは、まったく同じデータのために15 MBの代わりに400 MBが必要だということですが、それはすべてを説明していると思います。 –

+5

@AmV:セル配列と構造配列を持つことは、異種データ型を格納でき、それぞれの型を記述する必要があることです。通常のMATLABの "double"マトリックス(例: 'M = rand(3000,3000); v7.mat M -v7を保存する; v73.mat M -v7を保存する)を使用して2つのフォーマット(v7/v7.3) 3 ')、同様のファイルサイズになります。一方、上記の行列をセル配列(M = num2cell(M);)で置き換えれば、サイズに大きな違いが見られます。 – Amro

+6

http://www.mathworks.com/helpも参照してください。 MATファイル形式の詳細は、/pdf_doc/matlab/matfile_format.pdfを参照してください。 HDF5は汎用フォーマットであるため、いくつかの記述型情報はヘッダ内の文字列で行われます(例: "MATLAB_class"、 "double")。 MAT形式では、組み込みのMatlab型はバイナリマジッククッキーで記述され、2バイトに収まるので、MATヘッダーは56バイトにもなります。 Linuxまたはcygwinの場合、 "h5dump -p"と "od -c"は、v7.3ファイルのヘッダーを表示します。 –

関連する問題