我给出了一个类似于此但更长的矩阵。在计算平均值时,我会忽略nan
个值。
我遇到的问题是我的输出只是最后一行的平均值,我希望每行为我提供一个单独的平均值。
请告诉我是否应该澄清更多信息!
shortmeasurements = [ 300 301 303;
301 302 nan;
304 307 306;
nan 303 306;
nan 301 nan;]
我想我的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
答案 0 :(得分:5)
对于没有nan
的平均值,您可以使用nanmean
y = nanmean(shortmeasurements,dim)
其中shortmeasurements
是您的数据集,dim
指定您想要平均值的维度。 1
设置为每列平均值(默认值),2
设置为每行平均值。
因此,对于您的完整数据集:
airspeed = nanmean(Tube,2);
并且您不必使用此单行对nan
进行任何其他检查。
试运行:
airspeed = nanmean(shortmeasurements,2)
airspeed =
301.3333
301.5000
305.6667
304.5000
301.0000
如果您没有安装统计工具箱,请不要担心! MathWorks已实现该功能,以便在mean
(和max
,min
等)本身的搜索中省略nans:
A = [1 0 0 1 NaN 1 NaN 0];
M = mean(A,'omitnan')
M =
0.5000
答案 1 :(得分:2)
问题是在某些行中你使用
airSpeed(n, 1) = ...
但在其他人中你使用
airSpeed = ...
所有这些行都应该是
airSpeed(n, 1) = ...
否则您将覆盖这些值,并在遇到
时仅存储1个值airSpeed = ...
这就是为什么只存储最后一行的平均值。