0001 function y = nan_std(x) 0002 0003 nans = isnan(x); 0004 i = find(nans); 0005 0006 % Find mean 0007 avg = nan_mean(x); 0008 0009 if min(size(x))==1, 0010 count = length(x)-sum(nans); 0011 x = x - avg; 0012 else 0013 count = size(x,1)-sum(nans); 0014 x = x - avg(ones(size(x,1),1),:); 0015 end 0016 0017 % Replace NaNs with zeros. 0018 x(i) = zeros(size(i)); 0019 0020 % Protect against a column of all NaNs 0021 i = find(count==0); 0022 count(i) = ones(size(i)); 0023 y = sqrt(sum(x.*x)./max(count-1,1)); 0024 y(i) = i + NaN;