使用 matfile
函数增大数组
当将大量较大的值写入 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');
由于使用数据填充了数组,因此文件大小现在更大。