Matlabはファイルから指定された数の要素を読み込めません。私は、2つのファイルを読み込み、データに対して線形演算を行い、結合された結果を第3のファイルに書き込む単純なプログラムを持っています。MATLABがバイナリファイルを正常に読み込めないのはなぜですか?
私の質問は次のとおりです:1)Matlabが指定された数の要素を読み込めないのはなぜですか?2)これには回避策がありますか? あなたの考えはです。
入力ファイルのいくつかの詳細:
- 彼らは同じ大きさ(正確に)手続き上の
詳細(2-4ともに大(〜18ギガバイト)
- 読み込み用と出力用のファイルを開きます。両方のファイルのチェックは
feof
です。書くと(それぞれ)入力のそれぞれからN
フロート(N * 4バイト)で - 読む
- が
- がに結果を書き込むデータ(例えば0.5 *(datin1 + datin2))上で操作を実行ファイル出力ファイル。
これはすべて非常に簡単で、ほとんどの場合、これはうまくいきました。残念ながら、サイクルの中でいくつかの点で、MATLABは、ファイルの1からすべてのN
山車を取得していないと、手順3
CODEのSNIP上の行列寸法誤差を与える:
N = 2048;
fidin1 = fopen('file1.dat','r','l');
fidin2 = fopen('file2.dat','r','l');
fidout = fopen('outfile.dat','w','l');
%# I could do some assertions on the file sizes,
%# but I know they are the same size (w/o question).
while(~feof(fidin1) && ~feof(fidin2))
datin1 = fread(fidin1,N,'float=>single',0,'l');
datin2 = fread(fidin2,N,'float=>single',0,'l');
%# the following line produces an error after 100
%# or more iterations in to the procedure
datout = 0.5*(datin1+datin2);
fwrite(fidout,datout,'float',0,'l');
end
UPDATE 1を私が受けてる エラーメッセージは次のとおりです。
???Error using ==> plus
Matrix dimension must agree.
UPDATE 2 私が提案aを続きますそれぞれの読み取り後にferror
が含まれており、が魔法のように問題がなくなった。 それでは、私の質問への変更:ここで問題の根源は何か?これは単にタイミングの問題かバグでしょうか?
ここには、更新されたコードの一部が抜粋されています(コードの一部のみを示しています)。私はこれを行うより良い方法があると確信しています。いずれにしても、これらのチェックを追加することで、Matlabは各ファイルからのすべての読み取りを正常に完了させることができました。
[datin1 count1]= fread(fidin1,N,'float=>single',0,'l');
[msg errn1]=ferror(fidin1);
if errn1
pos1 = ftell(fidin1);
error('Error at Position %d in file. %d bytes were read.',...
pos1,count1);
end
[datin2 count2]= fread(fidin2,N,'float=>single',0,'l');
[msg errn2]=ferror(fidin2);
if errn2
pos2 = ftell(fidin2);
error('Error at Position %d in file. %d bytes were read.',...
pos2,count2);
end
%# the following line produces an error after 100
%# or more iterations in to the procedure
datout = 0.5*(datin1+datin2);
fwrite(fidout,datout,'float',0,'l');
正確なエラーメッセージを表示できますか? –
両方のファイルは内蔵ハードディスクにありますか?どのOSがあなたですか? 32または64ビットのmatlab? –
@ Andrew、 'Error using ==> plus ...行列の次元は一致しなければならない。 – ephsmith