fread(…) lets you specify the data type of the data to be read, but appears to always return the results in a matrix of doubles.
d = fread(fid, nc, 'int16');
K>> whos d
Name Size Bytes Class Attributes
d 46080×1 368640 double
That's not a problem for small data amounts, but I need to read files with 2-4 GB files with int16 data and work with it. Reading the a 4 GB file of int16's (2 billion elements) results in a 16 GB array of doubles, which I then need to convert back to int16's, so effectively temporarily uses 18 GB of memory.
Q: is there any way to specify the output data type, or tell fread to return the data in the same data type that it read from the file?
My current work-around is to preallocate an array of int16's, and read the the file in smaller chunks, converting each chunk from doubles back to int16's.
Anybody got a better solution?
Best Answer