34 lines
745 B
Matlab
34 lines
745 B
Matlab
function y = smartsum(x,dim)
|
|
%SMARTSUM Sum ignoring NaN.
|
|
%
|
|
% Same as SUM except that it returns the sum of the finite elements
|
|
% instead of propagating NaN and Inf
|
|
% Returns NaN if no element is finite
|
|
|
|
if nargin==1,
|
|
% Determine which dimension SUM will use
|
|
dim = min(find(size(x)~=1));
|
|
if isempty(dim), dim = 1; end
|
|
k=isfinite(x);
|
|
% x(~k)=-9999*ones(size(x(~k)));
|
|
% warning off
|
|
% y=sum(x.*k)./(sum(k,dim)>0);
|
|
% warning on
|
|
x(~k)=0;
|
|
y=sum(x, dim);
|
|
y(sum(k, dim)==0)=NaN;
|
|
|
|
else
|
|
% k=isfinite(x);
|
|
% x(~k)=-9999*ones(size(x(~k)));
|
|
% warning off
|
|
% y=sum(x.*k,dim)./(sum(k,dim)>0);
|
|
% warning on
|
|
|
|
k=isfinite(x);
|
|
x(~k)=0;
|
|
y=sum(x, dim);
|
|
y(sum(k, dim)==0)=NaN;
|
|
|
|
end
|