2011-03-15 17 views
1

現在、大量(数十GB)のデータファイルを、memmapファイルを使用してMatlabにインポートしています。私が読んでいるファイルは、それに続くデータを記述するいくつかのフィールドで構成されています。MATLABの大規模データを効率的に再編成または参照する

single_element = m.data(745).mydata(26); 

は、私がこれを考えるようにしたい:

m.format = { 'uint8' [1 1024] 'metadata'; ... 
'uint8' [1 500000] 'mydata' }; 
m.repeat = 10000; 

だから、私はデータの一つのサンプルは次のように対処される構造Mで終わる:ここに私のフォーマットがどのように見えるかの例です。この例から、10,000×500,000のマトリックスとしてのデータ。このように個々のアイテムを索引付けすることはやや面倒ですが、難しくありません。私の本当の問題は、たとえば私がアクセスしたいときに発生します。すべての行の4番目の列。 MATLABは、次のことを許可しません。

single_column = m.data(:).mydata(4); 

私は(私は途中でメタデータを気にしない)をゆっくりと実際のマトリックスの中に、この全体のことをピースにループを書くことができますが、データは、この大規模なため、それは難しいですどんなに遅くてもそれがいかに遅くなるかを過度に強調する...必要なメモリを2倍にするということは言うまでもありません。何か案は?

+0

データを読む前にデータのサイズを知っていますか? – MBZ

+0

はい、私はデータのフォーマットとサイズに関するすべてを知っています。 – Eric

答えて

0

単純マトリックスにマップ:

m.format = { 'uint8' [1024 500000] 'x' }; 

m.Data(1).xはあなたのデータ行列になります。

+0

入力ファイルのメタデータがサンプルデータとインターレースされているため、これは機能しません。ファイルが[メタデータブロック] [サンプルデータブロック] [メタ] [サンプル] [メタ] [サンプル]などになったら、私はそれをすべて手に取ることはできません。その事実の後にメタデータを出す。行列をコピーせずに削除できますか? – Eric

関連する問題