サイズが 92,504 KB の大きなバイナリ ファイルを読み込む必要があります。fread コマンドを使用すると、MATLAB でエラーが発生します。
fread の使用中にエラーが発生しました。メモリが不足しています。オプションに HELP MEMORY と入力します。
仮想メモリを使用している場合はクリアする必要があるため、MATLAB も再起動しようとしましたが、それでも問題は解決しません。
このデータ読み取りの問題を解決するにはどうすればよいですか。
サイズが 92,504 KB の大きなバイナリ ファイルを読み込む必要があります。fread コマンドを使用すると、MATLAB でエラーが発生します。
fread の使用中にエラーが発生しました。メモリが不足しています。オプションに HELP MEMORY と入力します。
仮想メモリを使用している場合はクリアする必要があるため、MATLAB も再起動しようとしましたが、それでも問題は解決しません。
このデータ読み取りの問題を解決するにはどうすればよいですか。
問題は、データの読み取りに使用しているコードです。
[data,count] = fread(fid,'uint8');
上記の行は、matlab にuint8s
可能な限り多くを読み込み、それらをベクトルに入れるように指示します。
問題は、matlab がそれを double のベクトルに入れることです。したがって、各要素が 1 バイトのベクトルではなく、各要素が 8 バイトのベクトルがあります。これにより、92Mb のデータが 92*8 = 736mb を占めるようになり、memory
コマンドで表示される最大可能配列サイズよりも大きくなる可能性があります。
uint8
ここでの解決策は、読み込んでいるデータを次のように実現できるベクトルに入れるように matlab に指示することです。
[data,count] = fread(fid,'*uint8');
データを読み込むためのこのメソッドは、出力ベクトルが入力データと同じ型でなければならないことを matlab に伝えます。詳細については、fread のドキュメントの精度セクションを参照してください。
32 ビット システムでは、MATLAB で使用できるメモリが非常に少ない場合があります。使用している fread コマンドは、ファイル全体を一度に読み取ります。システムに十分なメモリがないため、これはおそらく悪い考えです。実装するより良い方法は、ファイルを部分的に読み取ることです。A = fread(fileID, sizeA)
以下のリンク[1]を参照
してください。このコードをループ内に配置できます。ファイル全体を一度に読み取りたい場合は、3GB RAM を搭載した 64 ビット システムを使用することをお勧めします。