for循环与单元格输入参数

时间:2018-06-17 17:41:54

标签: matlab for-loop

我有4个数据矩阵50x35 double (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 个答案:

答案 0 :(得分:1)

创建动态变量名称从来没有充分的理由。他们创造的问题之一就是您正在经历的问题。使用结构/单元阵列/ ND阵列;适合的情况。在您的情况下,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_T0DiffMeanCT0DiffstdCT0现在可以Diff_.CT_T0DiffMean.CT0和{{1}来访问分别等等。