Mercurial > forge
changeset 11573:383535d6d361 octave-forge
new function: nanmean: mean ignoring NaNs
author | abarth93 |
---|---|
date | Mon, 25 Mar 2013 15:28:18 +0000 |
parents | cdd6e0bbf196 |
children | 17ec70047ad4 |
files | extra/ncArray/inst/@BaseArray/nanmean.m |
diffstat | 1 files changed, 56 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/extra/ncArray/inst/@BaseArray/nanmean.m Mon Mar 25 15:28:18 2013 +0000 @@ -0,0 +1,56 @@ +% Compute the mean (ignoring NaNs). +% s = mean (X, DIM) +% Compute the mean along dimension DIM. + +function [s,total,count] = nanmean(self,varargin) + +% s will be a cell element containing +% {the sum, the count of elements different from NaN} +% this is necessary to avoid 2 calls to reduce + +[s,n] = reduce(self,... + @(x,y) funred(x,y),... + @(x) funelem(x),... + varargin{:}); + +if isempty(s) + s = 0; +else + total = s{1}; + count = s{2}; + s = NaN*zeros(size(total)); + nonz = count ~= 0; + s(nonz) = total(nonz) ./ count(nonz); +end + +end + +function x = funelem(x) + % make sure x is not an ncArray + x = full(x); + m = isnan(x); + x(m) = 0; + x = {x,~m}; +end + +function s = funred(x,y) + s = {x{1} + y{1}, x{2} + y{2}} ; +end + + + +% Copyright (C) 2013 Alexander Barth <barth.alexander@gmail.com> +% +% This program is free software; you can redistribute it and/or modify +% it under the terms of the GNU General Public License as published by +% the Free Software Foundation; either version 2 of the License, or +% (at your option) any later version. +% +% This program is distributed in the hope that it will be useful, +% but WITHOUT ANY WARRANTY; without even the implied warranty of +% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +% GNU General Public License for more details. +% +% You should have received a copy of the GNU General Public License +% along with this program; If not, see <http://www.gnu.org/licenses/>. +