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 の回答にあるコマンドfwriteは、バイナリ ファイルに書き込みます。データをテキスト ファイルに書き込みたい場合は、dlmwriteを使用できます。
>> dlmwrite('data.csv',A,',');
[1] http://en.wikipedia.org/wiki/Endianness
バイナリ データのマシン形式 (IE、ieee-be、 ieee-le、vaxdなど) は、Matlab のfopenまたはfreadコマンドで指定できます 。サポートされているマシン形式の詳細は、Matlab のfopenのドキュメントに記載されています。
Bill の回答に対するScott French のコメント は、データを 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