Reading a large binary file

조회 수: 42 (최근 30일)
Dominik Rhiem
Dominik Rhiem 2023년 10월 18일
댓글: Dominik Rhiem 2023년 10월 19일
I want to load a 8 GB binary data file into Matlab. My computer has 24 GB of RAM. It runs out of memory, despite me closing literally everything besides Matlab, and I don't understand why. The file should not take more than its size, right?
Code for loading is simply:
fd = fopen(['data.bin'], 'r');
data = fread(fd, 'int16');
fclose(fd);

채택된 답변

James Tursa
James Tursa 2023년 10월 18일
편집: James Tursa 2023년 10월 18일
Try
data = fread(fd, '*int16');
When you use 'int16' for the type to read, MATLAB reads as int16 and then converts to double (four times the memory). When you use '*int16', MATLAB keeps the type as int16. E.g.,
% Create a small sample file
fid = fopen('junk.bin','wb');
fwrite(fid,int16(4),'int16');
fclose(fid);
% read it with 'int16'
fid = fopen('junk.bin','rb');
x = fread(fid,'int16')
x = 4
class(x) % double, not what you wanted
ans = 'double'
% read it with '*int16'
frewind(fid);
x = fread(fid,'*int16')
x = int16 4
class(x) % int16, this is what you wanted
ans = 'int16'
fclose(fid);
  댓글 수: 1
Dominik Rhiem
Dominik Rhiem 2023년 10월 19일
Positive side effect: This is extremely fast.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Large Files and Big Data에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by