Main Content

使用 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');

由于使用数据填充了数组,因此文件大小现在更大。

另请参阅

相关主题