如何在MATLAB中的循环中创建/处理变量?

use*_*362 3 variables matlab loops cell-array

我需要计算一些变量的均值,标准差和其他值,我想知道如何使用循环来获得优势.我有5个数据电极.所以要计算每个的平均值,我这样做:

mean_ch1 = mean(ch1);  
mean_ch2 = mean(ch2);  
mean_ch3 = mean(ch3);  
mean_ch4 = mean(ch4);  
mean_ch5 = mean(ch5);  
Run Code Online (Sandbox Code Playgroud)

我想要的是能够将代码压缩成一行左右.我试过的代码不起作用:

for i = 1:5  
  mean_ch(i) = mean(ch(i));  
end
Run Code Online (Sandbox Code Playgroud)

我知道这段代码是错误的,但它传达了我想要完成的想法.我想最终得到5个由循环命名的独立变量或一个包含所有5个变量的单元数组,以便于调用.我知道必须有一种方法来编写这段代码我只是不知道如何实现它.

gno*_*ice 11

您可以使用以下几种方法来执行此操作:

  • 您可以先将所有通道数据放入一个大矩阵中,然后使用MEAN函数计算行或列的平均值.例如,如果每个chX变量都是N-by-1数组,则可以执行以下操作:

    chArray = [ch1 ch2 ch3 ch4 ch5];  %# Make an N-by-5 matrix
    meanArray = mean(chArray);        %# Take the mean of each column
    
    Run Code Online (Sandbox Code Playgroud)
  • 您可以先将所有通道数据放入单元格数组,然后使用CELLFUN函数计算每个单元格的平均值:

    meanArray = cellfun(@mean,{ch1,ch2,ch3,ch4,ch5});
    
    Run Code Online (Sandbox Code Playgroud)

    即使每个chX阵列的长度彼此不同,这也可以工作.

  • 您可以使用EVAL为每个通道平均值生成单独的变量:

    for iChannel = 1:5
      varName = ['ch' int2str(iChannel)];  %# Create the name string
      eval(['mean_' varName ' = mean(' varName ');']);
    end
    
    Run Code Online (Sandbox Code Playgroud)