diff toolboxes/MIRtoolbox1.3.2/somtoolbox/nanstats.m @ 0:e9a9cd732c1e tip

first hg version after svn
author wolffd
date Tue, 10 Feb 2015 15:05:51 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toolboxes/MIRtoolbox1.3.2/somtoolbox/nanstats.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,65 @@
+function [me, st, md, no] = nanstats(D)
+
+%NANSTATS Statistical operations that ignore NaNs and Infs.
+%
+% [mean, std, median, nans] = nanstats(D)
+%
+%  Input and output arguments: 
+%   D   (struct) data or map struct
+%       (matrix) size dlen x dim
+%
+%   me  (double) columnwise mean
+%   st  (double) columnwise standard deviation
+%   md  (double) columnwise median
+%   no  (vector) columnwise number of samples (finite, not-NaN)
+
+% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+% Version 2.0beta juuso 300798 200900
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% check arguments
+
+(nargchk(1, 1, nargin));  % check no. of input args is correct
+
+if isstruct(D), 
+  if strcmp(D.type,'som_map'), D = D.codebook;
+  else D = D.data;
+  end
+end
+[dlen dim] = size(D);
+me = zeros(dim,1)+NaN;
+md = me;
+st = me;
+no = me;
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% computation
+
+for i = 1:dim,
+  ind = find(isfinite(D(:, i))); % indices of non-NaN/Inf elements
+  n   = length(ind);             % no of non-NaN/Inf elements
+
+  me(i) = sum(D(ind, i)); % compute average
+  if n == 0, me(i) = NaN; else me(i) = me(i) / n; end
+
+  if nargout>1, 
+    md(i) = median(D(ind, i)); % compute median
+
+    if nargout>2, 
+      st(i) = sum((me(i) - D(ind, i)).^2); % compute standard deviation
+      if n == 0,     st(i) = NaN;
+      elseif n == 1, st(i) = 0;
+      else st(i) = sqrt(st(i) / (n - 1));
+      end
+
+      if nargout>3, 
+	no(i) = n; % number of samples (finite, not-NaN)
+      end
+    end
+  end
+end
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+