使用循环如何在每行中取3个值的平均值?

kal*_*kal -1 matlab loops if-statement

我给了一个类似于此但更长的矩阵.我nan在计算平均值时忽略了这些值.我遇到的问题是我的输出只是最后一行的平均值,我希望每行为我提供一个单独的平均值.

如果我要澄清更多,请告诉我!

shortmeasurements = [ 300 301 303;

 301 302 nan;

 304 307 306;

 nan 303 306;

nan 301 nan;]
Run Code Online (Sandbox Code Playgroud)

我想我的mean线路出错了.Tube表示我取平均值的n- by- 3矩阵.

failcount = 0; %//initialize variables
flag = false;


for n = (1:size(Tube,1)) %//number of elements in first row
    if all(isnan((Tube(1,:))))== 1 %// if all values in row 1 are NaN
        failcount = failcount + 1; %//fail count + 1

        if failcount == 1 %//first time through loop
            airSpeed = isnan; %//airspeed nan
        else 
            airSpeed(n,1) = (airSpeed( n-1,1)) %//previous air speed
        end
    else
        airSpeed = mean(Tube(n,~isnan(Tube(n,:)))); %//taking the mean
Run Code Online (Sandbox Code Playgroud)

Adr*_*aan 5

对于没有nan你的平均值,你可以使用nanmean

y = nanmean(shortmeasurements,dim)
Run Code Online (Sandbox Code Playgroud)

shortmeasurements您的数据集在哪里,并dim指定您希望平均值的维度.1sets是每列的平均值(默认值)并将其2设置为每行的平均值.

因此,对于您的完整数据集:

airspeed = nanmean(Tube,2);
Run Code Online (Sandbox Code Playgroud)

并且您不必nan使用此单行进行任何其他检查.

测试运行:

airspeed = nanmean(shortmeasurements,2)

airspeed =

  301.3333
  301.5000
  305.6667
  304.5000
  301.0000
Run Code Online (Sandbox Code Playgroud)

如果您没有安装统计工具箱,不用担心!MathWorks公司已经实现了功能省略从搜索NaN的mean(和max,min等)本身:

A = [1 0 0 1 NaN 1 NaN 0];
M = mean(A,'omitnan')
M = 
    0.5000
Run Code Online (Sandbox Code Playgroud)