Global Index (all files) (short | long) | Local Index (files in subdir) (short | long)
[y,mi] = nmean(x,dim)
NMEAN Average or mean value, ignoring NaN. Same as MEAN, but NaN's are ignored. uses : intvers.m
| This function is called by | |
|---|---|
function [y,mi] = nmean(x,dim)
% Copyright (c) 1997 by Toby Driscoll.
% Adapted from MEAN.M, written by The MathWorks, Inc.
% added backwards compatibility G.Krahmann, LODYC Paris
% removed bug on undoc. feature GK 28.5.1999
if prod(size(x))==1,
y = x;
if nargout==2
mi = 1;
end
return
end
if nargin==1,
dim = min(find(size(x)~=1));
if isempty(dim), dim = 1; end
end
if intvers>4
mask = isnan(x);
if nargout==2
x = shiftdim(x, dim-1);
s = size(x);
s2 = s;
s2(2:length(s2)) = 1;
s(1) = 1;
mi = reshape([1:s2(1)],s2);
mi = repmat(mi,s);
mi(mask) = 0;
mi = shiftdim(mi, ndims(x)-(dim-1));
x = shiftdim(x, ndims(x)-(dim-1));
end
x(mask) = 0;
s = sum(~mask,dim);
s(s==0) = NaN;
if ~isempty(x),
y = sum(x,dim)./s;
else
y = NaN;
end
if nargout==2
if ~isempty(x),
mi = sum(mi,dim)./s;
else
mi = NaN;
end
end
else
[m,n] = size(x);
y = zeros(m,n);
valid = ~isnan(x);
y(valid) = x(valid);
s = sum(valid);
if ~isempty(x)
y = sum(y) ./ s;
else
y = NaN;
end
if nargout==2
mi = zeros(m,n);
mi2 = [1:m]'*ones(1,n);
mi(valid) = mi2(valid);
if ~isempty(x)
mi = sum(mi) ./ s;
else
mi = NaN;
end
end
end