matlab 进度条显示剩余时间,MATLAB:保存文件时显示进度条?

您无法在MATLAB中监视保存命令的进度.这是因为MATLAB不在另一个线程中执行保存操作,而是使用程序的主线程阻止您在保存文件时执行任何操作.

您可以提供一个对话框,告诉用户保存正在发生,并在保存完成后将其删除.

dlg = msgbox('Save operation in progress...');

save('output.mat');

if ishghandle(dlg)

delete(dlg);

end

潜在的解决方案

如果您确实要保存多个变量并监视进度,可以使用-append标志独立保存和追加每个变量.

vars2save = {'a', 'b', 'c', 'd'};

outname = 'filename.mat';

hwait = waitbar(0, 'Saving file...');

for k = 1:numel(vars2save)

if k == 1

save(outname, vars2save{k})

else

save(outname, vars2save{k}, '-append');

end

waitbar(k / numel(vars2save), hwait);

end

delete(hwait);

基准

我做了一个基准测试,看看第二种方法如何影响总节省时间.似乎使用-append来保存每个变量的性能损失比预期的要小.这是代码和结果.

function saveperformance

% Number of variables to save each time through the test

nVars = round(linspace(1, 200, 20));

outname = 'filename.mat';

times1 = zeros(numel(nVars), 1);

times2 = zeros(numel(nVars), 1);

for k = 1:numel(nVars)

% Delete any pre-existing files

if exist('outname')

delete(outname)

end

% Create variable names

vars2save = arrayfun(@(x)['x', num2str(x)], 1:nVars(k), 'Uniform', 0);

% Assign each variable with a random matrix of dimensions 50000 x 2

for m = 1:numel(vars2save)

eval([vars2save{m}, '=rand(50000,2);']);

end

% Save all at once

tic

save(outname, vars2save{:});

times1(k) = toc;

delete(outname)

% Save one at a time using append

tic

for m = 1:numel(vars2save)

if m == 1

save(outname, vars2save{m});

else

save(outname, vars2save{m}, '-append');

end

end

times2(k) = toc;

end

% Plot results

figure

plot(nVars, [times1, times2])

legend({'All At Once', 'Append'})

xlabel('Number of Variables')

ylabel('Execution Time (seconds)')

end

2f760544a72a31b29e2c1b3f204a8459.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值