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)
    对于没有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)