当将大量较大的值写入 MAT 文件时,文件大小以非递增方式增加。这种增加方式是预期的结果。为了尽可能减少文件必须增长的次数并确保最佳性能,在为数组填充数据之前将初始值赋给数组。
例如,假设有一个可写入的 MatFile 对象。
fileName = 'matFileOfDoubles.mat';
matObj = matfile(fileName);
matObj.Properties.Writable = true;
定义要写入的值的参数。在此例中,将写入一百万个值,一次写入五万个。这些值的均值为 123.4,标准差为 56.7。
size = 1000000;
chunk = 50000;
mean = 123.4;
std = 56.7;
在使用数据填充数组之前,将初始值零赋给数组中的最后一个元素。
matObj.data(1,size) = 0;
查看文件的大小。
-
在 Windows® 系统上,使用
dir
。system('dir matFileOfDoubles.mat');
-
在 UNIX® 系统上,使用
ls -ls
:system('ls -ls matFileOfDoubles.mat');
在这种情况下,matFileOfDoubles.mat 少于 5000 个字节。将一个初始值赋给数组的最后一个元素不会创建一个大文件。但它却可以让系统为 matFileOfDoubles.mat 可能较大幅度的大小增加做好准备。
将数据写入数组,一次写入一个分块。
nout = 0;
while(nout < size)
fprintf('Writing %d of %d\n',nout,size);
chunkSize = min(chunk,size-nout);
data = mean + std * randn(1,chunkSize);
matObj.data(1,(nout+1):(nout+chunkSize)) = data;
nout = nout + chunkSize;
end
查看文件的大小。
system('dir matFileOfDoubles.mat');
由于使用数据填充了数组,因此文件大小现在更大。