将工作区变量命名并保存到名称中具有更改编号的文件-Matlab

问题描述 投票:0回答:1

因此,我的代码输出在Matlab工作区的每个循环中都会产生许多变量。我想将两个变量(即MO和Vr)保存到一个具有固定名称的文件,该名称的数字在每个循环中都会变化。每个循环中更改的数字为“ NT + 1”。首先,我使用以下代码更改两个所需变量的名称:

eval(sprintf('MO%d=MO;',NT+1));
eval(sprintf('Vr%d=Vr;',NT+1));

现在,我要将重命名的MO和Vr变量保存在结尾为NT + 1的.mat文件中。例如,如果NT + 1 = 60,我希望将两个重命名的变量(MO60和Vr60)保存在文件中,文件末尾具有NT + 1编号:sim60.mat

save('sim%d.mat','MO%d','Vr%d',NT+1)

假设,以上代码的输出应为名为'sim60.mat'的文件,具有两个变量MO60和Vr60。

当每个循环中的NT + 1发生变化并且每个循环中的保存命令还必须更改MO和Vr的名称时,如何自动执行这种保存?

matlab variables save printf eval
1个回答
0
投票
继续

% create file name flNm = num2str(i,'sim%d.mat'); % save file save(flNm,'MO','Vr');

如果现在加载文件,则将其加载到结构中

flNm = num2str(i,'sim%d.mat');
Dat = load(flNm,'MO','Vr');
% access the variables
Dat.Mo
Dat.Vr

通常,由于内存太小而无法将它们存储在多维数组或单元中,因此需要在循环内加载和保存变量:

i_max = 10;
MO_all = NaN(3,3,i_max)
Vr_all = cell(i_max)
for i = 1:i_max
    % what happens in every loop
    MO = rand(3,3);
    Vr = rand(randi(10),randi(10)); % changing size
    % store for other loops
    MO_all(:,:,i) = MO;
    Vr_all{i} = Vr;
end

您对特定问题的解决方案是(

[我不建议使用此,因为它不灵活,不可靠并且首先需要eval创建变量!)

flNm = num2str(NT+1,'sim%d.mat'); vars2save = {num2str(NT+1,'MO%d'),num2str(NT+1,'Vr%d')}; save('sim%d.mat',vars2save {:})

© www.soinside.com 2019 - 2024. All rights reserved.