命名工作区变量并将其保存到文件中,名称中的数字不断变化 - Matlab
naming and saving workspace variables to a file with a changing number in the name - Matlab
所以我的代码输出在 Matlab 工作区的每个循环中产生许多变量。我想将两个变量(即 MO 和 Vr)保存到一个具有固定名称的文件中,其中的数字在每个循环中都会发生变化。每次循环变化的数字是"NT+1"。
首先,我使用以下代码更改两个所需变量的名称:
eval(sprintf('MO%d=MO;',NT+1));
eval(sprintf('Vr%d=Vr;',NT+1));
现在我想将重命名的MO和Vr变量保存在一个.mat文件中,最后有NT+1编号。例如,如果 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都变了,而且每次循环的save命令都要修改MO和Vr的名字,如何自动保存?
您不应重命名工作区变量,因为您将需要使用 eval
,这几乎总是不好的做法。
选择
% 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 {:})
所以我的代码输出在 Matlab 工作区的每个循环中产生许多变量。我想将两个变量(即 MO 和 Vr)保存到一个具有固定名称的文件中,其中的数字在每个循环中都会发生变化。每次循环变化的数字是"NT+1"。 首先,我使用以下代码更改两个所需变量的名称:
eval(sprintf('MO%d=MO;',NT+1));
eval(sprintf('Vr%d=Vr;',NT+1));
现在我想将重命名的MO和Vr变量保存在一个.mat文件中,最后有NT+1编号。例如,如果 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都变了,而且每次循环的save命令都要修改MO和Vr的名字,如何自动保存?
您不应重命名工作区变量,因为您将需要使用 eval
,这几乎总是不好的做法。
选择
% 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 {:})