爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6008|回复: 3

[讨论] nanmean究竟是怎么样的一个求平均方法

[复制链接]

新浪微博达人勋

发表于 2014-5-24 18:28:07 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我在论坛搜索不了相关的帖子,所以才在此发帖求助的。
一般数组中存在nan的时候,大多数情况下会用nanmean来求平均值,但是如果先把不是非数的数据求和并计算其个数,然后用求和的结果除以不是非数的个数之后的值,与前者会是不一样。下面是我编的小程序,其中b=3.0833是用nanmean求出来的结果,c=3是用后者方法求出来的结果。若看客知道个中缘由的,望告知,先行谢过。:)
a=[1 2;3 nan;4 5;nan nan];
b=nanmean(nanmean(a));
[k,l]=size(a);
sum=0;h=0;
for i=1:k
    for j=1:l
        if isnan(a(i,j))==0
            sum=sum+a(i,j);
            h=h+1;
        end
    end
end
c=sum/h;
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2014-5-25 10:09:37 | 显示全部楼层
将b=nanmean(nanmean(a));
改写成
b1=nanmean(a)
b=nanmean(b1)
你就会明白了!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-5-26 10:48:30 | 显示全部楼层
二爷名声在外 发表于 2014-5-25 10:09
将b=nanmean(nanmean(a));
改写成
b1=nanmean(a)

我根据nanmean的程序算了一下,发现算到这一步老是报错‘Index exceeds matrix dimensions.’。而且这程序后面部分看起来也觉得怪怪的,不明白真正用意,望解析。

function m = nanmean(x,dim)
nans = isnan(x);
x(nans) = 0;

if nargin == 1 % let sum deal with figuring out which dimension to use
    % Count up non-NaNs.
    n = sum(~nans);
    n(n==0) = NaN; % prevent divideByZero warnings
    % Sum up non-NaNs, and divide by the number of non-NaNs.
    m = sum(x) ./ n;
else
    % Count up non-NaNs.
    n = sum(~nans,dim);
    n(n==0) = NaN; % prevent divideByZero warnings
    % Sum up non-NaNs, and divide by the number of non-NaNs.
    m = sum(x,dim) ./ n;
end
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 成长值: 32430
发表于 2014-5-27 06:53:01 | 显示全部楼层
简单的看了看,第一部分说的是只有一个参数的时候怎么计算;第二部分讲的是有两个参数的时候怎么计算……
区别就是第二段是由你限定维数了,你的错误也和维数有关,试着加上维数这个限定值试试……
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表