gpt4 book ai didi

MATLAB:保存文件时显示进度条?

转载 作者:太空宇宙 更新时间:2023-11-03 19:56:38 25 4
gpt4 key购买 nike

我有一个 MATLAB GUI(在 GUIDE 中开发),我让用户可以选择保存某些数据结构变量(作为 .mat 文件)。但是,这是一个很大的 .mat 文件,保存此文件最多可能需要一分钟。没有任何进度指示,我无法告诉用户文件何时保存(允许他们在 GUI 中执行其他操作)。有没有办法创建一个与保存功能的进度相关联的等待栏?任何帮助,将不胜感激!

最佳答案

您无法在 MATLAB 中监控 save 命令的进度。这是因为 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

enter image description here

关于MATLAB:保存文件时显示进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38149517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com