MATLAB Answers

MatFile grows exponentially larger in an empty table replacement loop?

6 views (last 30 days)
Homo Sapiens
Homo Sapiens on 18 May 2020
Answered: Asvin Kumar on 20 May 2020
First create a MatFile:
a=matfile("Test.mat");
Then create an empty table:
a.Data=table('Size',[0 1],'VariableTypes',"uint8");
The Test.mat is 23.3 ㎅. Now we run the code again to replace the table with the same new one:
a.Data=table('Size',[0 1],'VariableTypes',"uint8");
Note the file becomes 51.6 ㎅, about 2.2 times larger. Again, 91.6 ㎅, 1.8 times larger; 150 ㎅, 1.6 times larger; 223㎅, 1.5 times larger; 308㎅, 1.4 times larger; 407 ㎅, 1.3 times larger … What a horrible increase!

  0 Comments

Sign in to comment.

Answers (1)

Asvin Kumar
Asvin Kumar on 20 May 2020
This is a known issue in MAT files saved with version 7.3 based on HDF5 which does not manage freespace as effectively as it should. Frequently rewriting or deleting a dataset can result in freespace and cause the file to grow unnecessarily large.
One workaround is to avoid changing a single variable in the matfile handle. Instead, load the variables and save it into a new MAT file. The other workaround is to choose the format 7.0 by using '-v7' argument of save. Please refer to the following section:
Some useful links containing the detailed explanation:

  0 Comments

Sign in to comment.

Tags

Products


Release

R2020a