回 帖 发 新 帖 刷新版面

主题:怎样求含有缺失数据数组的平均值

比如一个数组

y = [1.2 1.1 1.6 NaN 1.4 1.6 1.7 1.9 NaN 1.23 NaN NaN NaN 0.98 0.7];

怎样求平均值

用mean(y)好象行不通,哪位达人了解的能告诉一下吗?

谢谢啦.

回复列表 (共11个回复)

沙发


是不是应该把NaN转化成一个数(比如为0),然后求mean

y=[1.2 1.1 1.6 NaN 1.4 1.6 1.7 1.9 NaN 1.23 NaN NaN NaN 0.98 0.7];
for i=1:length(y)
       if isnan(y(i))==1
          y(i)=0;
       end
end
mean(y)

板凳

楼上的,谢谢啦..

3 楼

应该把NaN踢出去再求平均吧
y=[1.2 1.1 1.6 NaN 1.4 1.6 1.7 1.9 NaN 1.23 NaN NaN NaN 0.98 0.7];
LI=isnan(y); % logic index
avg=mean(y(~LI));

4 楼

谢谢楼上的

5 楼

谢谢ricckma,我还有一个问题,如果比方y=[1.2 1.1 1.6 NaN 1.4 1.6 1.7 1.9 NaN 1.23 NaN NaN NaN 0.98 0.7];

for i = 1:length(y)

我要求 avg(5) = y(5) - mean(y(1:5))怎么写?

6 楼

不太清楚你的意思,大概猜一下,你试试下面的程序:
for i=1:length(y)
if isnan(y(i)) 
avg(i) = NaN;
continue; 
end
subY=y(1:i);
avg(i)= y(i)-mean(subY(~isnan(subY)));
end

7 楼

再次谢谢ricckma,我试了

这是我的程序
for i=1:length(obs)
if isnan(obs(i)),
avg(i) = NaN;
continue; 
end
subOBS=obs(1:i);
y(i)= obs(i)-mean(subOBS(~isnan(subOBS)));
end

nobs = size((obs-1),1); % rows
n    = size((obs-1),1); % cols
at   = a0; 
at_1 = a0; 
Pt   = P0; 
Pt_1 = P0; 
logl = zeros(nobs,1);
T = 1;

for i=(p+1):nobs,
        
  Z=[1 y((i-1):-1:(i-p))'];  % measurement matrix
                
end

-----------------------------------------------------
然后系统提示:??? Error using ==> horzcat
All matrices on a row in the bracketed expression must have the 
 same number of rows.

Error in ==> tvar at 32
  Z=[1 y((i-1):-1:(i-p))'];  % measurement matrix

找不到解决方法....困惑

8 楼

知道为什么了.

9 楼

能不能问一个有点若智的问题.

比方obs = [1.23 1.232 1.545 1.233 1.34 NaN 1.23 1.76 NaN NaN 2.12]';

用for i=1:length(obs)
if isnan(obs(i)),
avg(i) = NaN;
continue; 
end
subOBS=obs(1:i);
y(i)= obs(i)-mean(subOBS(~isnan(subOBS)));
end

得出 y = [0.23 0.232 0.232 ... 0.232]

如果我想要 y = [0.23 0.232 0.232 ... 0.232]'该怎么做?

10 楼

真是弱智啊

解决了
for i=1:length(obs)
if isnan(obs(i)),
avg(i) = NaN;
continue; 
end
subOBS=obs(1:i);
yy(i)= obs(i)-mean(subOBS(~isnan(subOBS)));
end

y = yy';
就可以了

我来回复

您尚未登录,请登录后再回复。点此登录或注册