主题:怎样求含有缺失数据数组的平均值
terryzz5
[专家分:0] 发布于 2007-11-09 21:24:00
比如一个数组
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个回复)
沙发
nihao_345 [专家分:70] 发布于 2007-11-09 21:42:00
是不是应该把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)
板凳
terryzz5 [专家分:0] 发布于 2007-11-09 21:47:00
楼上的,谢谢啦..
3 楼
ricckma [专家分:370] 发布于 2007-11-09 22:17:00
应该把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 楼
terryzz5 [专家分:0] 发布于 2007-11-09 22:46:00
谢谢楼上的
5 楼
terryzz5 [专家分:0] 发布于 2007-11-10 00:23:00
谢谢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 楼
ricckma [专家分:370] 发布于 2007-11-10 01:24:00
不太清楚你的意思,大概猜一下,你试试下面的程序:
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 楼
terryzz5 [专家分:0] 发布于 2007-11-10 07:55:00
再次谢谢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 楼
terryzz5 [专家分:0] 发布于 2007-11-10 08:05:00
知道为什么了.
9 楼
terryzz5 [专家分:0] 发布于 2007-11-10 09:30:00
能不能问一个有点若智的问题.
比方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 楼
terryzz5 [专家分:0] 发布于 2007-11-10 09:34:00
真是弱智啊
解决了
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';
就可以了
我来回复