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

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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值