poster
2019-12-10, 20:41
我需要计算多个变量的平均值,标准偏差和其他值,我想知道如何利用循环来发挥自己的优势。我有5个电极。因此,为了计算每个的平均值,我这样做:
mean_ch1 = mean(ch1); mean_ch2 = mean(ch2); mean_ch3 = mean(ch3); mean_ch4 = mean(ch4); mean_ch5 = mean(ch5); 我想要的是能够将该代码压缩为一行左右。我尝试的代码不起作用:
for i = 1:5 mean_ch(i) = mean(ch(i)); end 我知道这段代码是错误的,但是它传达了我要完成的想法。我想以循环或单元数组命名的5个单独变量结束,其中所有5个变量都可以轻松调用。我知道必须有一种编写此代码的方法,但我不确定该如何完成。
回答:
您可以选择几种方法:
您可以先将所有通道数据放入一个大矩阵中,然后使用MEAN (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/mean.html)函数计算行或列的平均值。例如,如果每个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
您可以先将所有通道数据放入一个单元格数组,然后使用CELLFUN (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cellfun.html)函数计算每个单元格的平均值 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cellfun.html) :
meanArray = cellfun(@mean,{ch1,ch2,ch3,ch4,ch5}); 即使每个chX数组的长度彼此不同,这也将起作用。
您可以使用EVAL (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/eval.html)为每个通道均值生成单独的变量:
for iChannel = 1:5 varName = ['ch' int2str(iChannel)]; %# Create the name string eval(['mean_' varName ' = mean(' varName ');']); end
更多&回答... (https://stackoverflow.com/questions/3143959)
mean_ch1 = mean(ch1); mean_ch2 = mean(ch2); mean_ch3 = mean(ch3); mean_ch4 = mean(ch4); mean_ch5 = mean(ch5); 我想要的是能够将该代码压缩为一行左右。我尝试的代码不起作用:
for i = 1:5 mean_ch(i) = mean(ch(i)); end 我知道这段代码是错误的,但是它传达了我要完成的想法。我想以循环或单元数组命名的5个单独变量结束,其中所有5个变量都可以轻松调用。我知道必须有一种编写此代码的方法,但我不确定该如何完成。
回答:
您可以选择几种方法:
您可以先将所有通道数据放入一个大矩阵中,然后使用MEAN (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/mean.html)函数计算行或列的平均值。例如,如果每个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
您可以先将所有通道数据放入一个单元格数组,然后使用CELLFUN (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cellfun.html)函数计算每个单元格的平均值 (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/cellfun.html) :
meanArray = cellfun(@mean,{ch1,ch2,ch3,ch4,ch5}); 即使每个chX数组的长度彼此不同,这也将起作用。
您可以使用EVAL (http://www.mathworks.com/access/helpdesk/help/techdoc/ref/eval.html)为每个通道均值生成单独的变量:
for iChannel = 1:5 varName = ['ch' int2str(iChannel)]; %# Create the name string eval(['mean_' varName ' = mean(' varName ');']); end
更多&回答... (https://stackoverflow.com/questions/3143959)