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)