代码之家  ›  专栏  ›  技术社区  ›  Mac.

带单元输入参数的for循环

  •  0
  • Mac.  · 技术社区  · 6 年前

    我有4个数据矩阵50x35双 (Diff_CT, Diff_Imp, Diff_F1, Diff_F2)

    我需要对每个矩阵执行完全相同的计算,突然我想创建一个for循环,其中矩阵名称的一部分是输入参数

    一个我努力但没有成功的例子

    parameters = {'CT', 'Imp', 'F1', 'F2'};
    
    for i_parameters = 1: numel(parameters)
        my_parameters = parameters{i_parameters};
    
        ['Diff_',(my_parameters),'_T0'] = ['Diff_',(my_parameters)](:,1) ['Diff_',(my_parameters)](:,8) ['Diff_',(my_parameters)](:,15) ['Diff_',(my_parameters)](:,22) ['Diff_',(my_parameters)](:,29)];
        ['DiffMean',(my_parameters),'0'] = mean(mean(['Diff_',(my_parameters),'_T0'));
        ['Diffstd',(my_parameters),'0'] = std(std(['Diff_',(my_parameters),'_T0'));
    end
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   Sardar Usama    6 年前

    从来没有一个好的理由来创建动态变量名。他们制造的问题之一就是你所经历的。使用structs/cell arrays/nd arrays;视情况而定。在您的情况下,struct似乎更适合如下所示:

    %Converting your data matrices into a struct
    Diff_ = struct('CT',Diff_CT, 'Imp',Diff_Imp, 'F1',Diff_F1, 'F2', Diff_F2);  
    
    for i_parameters = 1 : numel(parameters)       
        my_parameters = parameters{i_parameters}; 
    
        %Creating structures with your variables as their fields        
        Diff_.([my_parameters '_T0']) = [Diff_.(my_parameters)(:,1)  ...
            Diff_.(my_parameters)(:,8)  Diff_.(my_parameters)(:,15) ...
            Diff_.(my_parameters)(:,22) Diff_.(my_parameters)(:,29)];
    
        DiffMean.([my_parameters '0']) = mean(mean(Diff_T0.(my_parameters)));
        Diffstd.([my_parameters '0'])  = std(std(Diff_T0.(my_parameters)));
    end
    

    你期望的变量是什么 Diff_CT_T0 , DiffMeanCT0 DiffstdCT0 现在可以作为 Diff_.CT_T0 , DiffMean.CT0 Diffstd.CT0 分别等等。