【问题标题】:naming and saving workspace variables to a file with a changing number in the name - Matlab命名工作区变量并将其保存到名称中更改数字的文件中 - Matlab
【发布时间】:2020-05-31 16:35:42
【问题描述】:

因此,我的代码输出在 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的名称也必须在每个循环中为save命令更改时,如何自动执行这种保存?

【问题讨论】:

    标签: matlab variables save printf eval


    【解决方案1】:

    您不应重命名工作区变量,因为您需要使用 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 {:})
    

    【讨论】:

      猜你喜欢
      • 2013-09-27
      • 2012-06-28
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多