matlab 含有nan值的 求和 平均 nansum nanmean isnan

前几天编程,想算一个矩阵在含有nan值情况下的sum mean 等

这个功能一直没找到,于是自己编了小函数

最后呢,忽然发现在stats toolbox中居然有这种函数

nansum  nanmean 等等

说起来,就两招

1、isnan

2、逻辑数组的加减法--这一条真让人吐血,之前完全不知道逻辑型可以计数的

我编了一堆的话,而事实上人家用了这样几行就可以搞定

nans = isnan(x);

x(nans) = 0;

n = sum(~nans);  % 把这个0啊1啊的数列求和...就得到非零的个数,可这个nans分明是个逻辑数组

sum(x)./n;

stats toolbox里已经有了这些函数,

可以用 edit nanmean这个命令查看

下面这个是我编的

 

function M = mean_with_nan(A,dim)
% MEAN_WITH_NAN: Mean value, ignoring NaNs.
% USAGE:
% M = mean_with_nan(A)
% M = mean_with_nan(A,dim)
% input:
%       A - vector or multiple-dim arrays (with nan)
%       dim - take mean value along dim
% output:
%       M - mean value
% for nargin =1
% M is a number, even if input is arrays, this function treats it as a vector
%
% for nargin = 2
% input multiple-dim array, similar as the function MEAN
% M is the mean value along the dim
%
% Last edited 2011-2-1

    li = isnan(A);
    if nargin == 1
        M = mean(A(~li));
    elseif  nargin == 2
        A(li) = 0;
        n = sum(~li,dim);
        n(n==0) = NaN;
        M = sum(A,dim)./n;
    end
end

 

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值