私のmatlabの知識は、単に知る必要があるだけなので、これはおそらく基本的な質問です。それにもかかわらず、ここに来ます:
バイナリ形式で保存されたデータ(16ビット整数)を含むファイルがあります。それをmatlabのベクトル/配列に読み込むにはどうすればよいですか?このデータをmatlabのファイルに書き込むにはどうすればよいですか?大量のデータ(ギガバイト)の読み取り/書き込み時のパフォーマンス速度を向上させるためのスマートな調整はありますか?
Bill the Lizard が書いたように、freadを使用してデータをベクターにロードできます。彼の答えを少し広げたいと思います。
>> fid=fopen('data.bin','rb') % opens the file for reading
>> A = fread(fid, count, 'int16') % reads _count_ elements and stores them in A.
コマンドfopenおよびfreadのデフォルトはリトルエンディアン[1]エンコーディング整数の場合。ファイルがビッグエンディアンでエンコードされている場合は、freadを次のように変更する必要があります。
>> A = fread(fid, count, 'int16', 'ieee-be');
また、ファイルセット全体を読みたい場合
>> count=inf;
n列の行列にデータを読み込みたい場合は、
>> count=[n inf];
データをファイルに書き込むことについて。 Bill's answerのコマンドfwriteは、バイナリファイルに書き込みます。データをテキストファイルに書き込みたい場合は、dlmwriteを使用できます。
>> dlmwrite('data.csv',A,',');
[1] http://en.wikipedia.org/wiki/Endianness
マシンフォーマット(IE、ieee-be、ieee-le、バイナリデータのvaxdなど)は、fopenのいずれかで指定できます。 )またはMatlabのfreadコマンド。サポートされているマシン形式の詳細は、Matlabのfopenのドキュメントに記載されています。
Scott French's コメント Bill's answer は、データをint16変数に読み込むことを提案します。これを行うには
>> A = int16(fread(fid,count,precision,machineFormat));
ここで、countは、読み取るデータのサイズ/形状です。precisionはデータ形式であり、machineformatは各バイトのエンコーディングです。
ファイル内を移動するには、コマンドfseekを参照してください。例えば、
>> fseek(fid,0,'bof');
bofがファイルの先頭を表す先頭にファイルを巻き戻します。
ファイルに格納した値の数がわかっている場合は、次のようにしてデータを配列に読み込むことができます。
fid = fopen('data.bin','rb')
A = fread(fid, count, 'int16')
ファイルにデータを書き込むには、次のようにします。
fid = fopen('data.bin','w')
count = fwrite(fid, A, 'int16')
Fwrite関数は、ファイルに書き込まれた要素(バイトではない)の数を返します。
パフォーマンスチューニングに関する限り、データをチャンクで読み取って、処理する必要がある分だけ使用することができます。これはどの言語でも同じであり、Matlabに固有の速度を上げる方法はありません。
私は通常、応答にリンクが表示されるのを嫌いますが、これはかなり近いように見えます。
http://www.mathworks.com/support/tech-notes/1400/1403.html
パフォーマンスチューニングの2番目の部分については、Matlabを使用してから6年が経過しているので、わかりません。
HTH