]> Creatis software - CreaPhase.git/blobdiff - octave_packages/nnet-0.1.13/__analyzerows.m
Add a useful package (from Source forge) for octave
[CreaPhase.git] / octave_packages / nnet-0.1.13 / __analyzerows.m
diff --git a/octave_packages/nnet-0.1.13/__analyzerows.m b/octave_packages/nnet-0.1.13/__analyzerows.m
new file mode 100644 (file)
index 0000000..8a62213
--- /dev/null
@@ -0,0 +1,117 @@
+## Copyright (C) 2008 Michel D. Schmid  <michaelschmid@users.sourceforge.net>
+##
+##
+## 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, 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; see the file COPYING.  If not, see
+## <http://www.gnu.org/licenses/>.
+
+## -*- texinfo -*-
+## @deftypefn {Function File} {} @var{retmatrix} = __analyzerows(@var{matrix})
+## @code{__analyzerows} takes a matrix as input argument and checks what kind of
+## data are contained in the rows.
+##   a.) binary values? Means the row contains only 0 and 1
+##   b.) unique values?
+##   c.) Min values are several times contained in the row
+##   d.) Max values are several times contained in the row
+## @end deftypefn
+
+## Author: mds
+
+function retmatrix = __analyzerows(matrix)
+
+  ## check number of inputs
+  error(nargchk(1,1,nargin));
+
+  nRows = size(matrix,1);   # get number or rows
+  retmatrix = zeros(nRows,4);
+  doneVec = zeros(nRows,1);
+
+  ## now let's check which rows are binary
+  i = 1;
+  while (i <= nRows)
+    vec = matrix(i,:);
+    n1 = find(vec==1);
+    n0 = find(vec==0);
+    if (length(n1)==0 || length(n0)==0)
+      #do nothing
+    else
+      if (length(vec)==(length(n1)+length(n0)))
+        # in this case, the vector contains only ones and zeros
+        retmatrix(i,1) = 1;
+        doneVec(i) = 1;
+      endif
+    endif
+    i += 1;
+  endwhile
+
+  ## now let's check which rows are unique
+  i = 1;
+  while (i <= nRows)
+    if (doneVec(i)==0)
+      vec = matrix(i,:);
+      n1 = find(vec==vec(1));
+      if (length(vec)==(length(n1)))
+        # in this case, the vector contains only unique data
+        retmatrix(i,2) = 1;
+        doneVec(i) = 1;
+      endif
+    endif
+  i += 1;
+  endwhile
+
+  
+  ## now let's check how often we can find the min value
+  i = 1;
+  while (i <= nRows)
+       if (doneVec(i)==0)
+      vec = matrix(i,:);
+      n1 = min(vec);
+         retmatrix(i,3) = length(find(n1==vec));
+       endif
+  i += 1;
+  endwhile
+  
+  ## now let's check how often we can find the max value
+  i = 1;
+  while (i <= nRows)
+       if (doneVec(i)==0)
+      vec = matrix(i,:);
+      n1 = max(vec);
+         retmatrix(i,4) = length(find(n1==vec));
+       endif
+  i += 1;
+  endwhile
+
+endfunction
+
+%!shared b, retmat
+%! disp("testing __analyzerows")
+%! b = [1 0 0 1; 1 0 0 0; 1 2 0 1];
+%! retmat = __analyzerows(b);
+%!assert(retmat(1,1)==1);#%!assert(retmat(1,1)==1);
+%!assert(retmat(2,1)==1);
+%!assert(retmat(3,1)==0);
+%! b = [1 0 0 2; 1 0 0 0; 1 1 1 1];
+%! retmat = __analyzerows(b);
+%!assert(retmat(1,2)==0);
+%!assert(retmat(2,2)==0);
+%!assert(retmat(3,2)==1);
+%! b = [1 0 0 2; 1 0 0 0; 1 1 1 1];
+%! retmat = __analyzerows(b);
+%!assert(retmat(1,3)==2);
+%!assert(retmat(2,3)==0);
+%!assert(retmat(3,3)==0);
+%! retmat = __analyzerows(b);
+%!assert(retmat(1,4)==1);
+%!assert(retmat(2,4)==0);
+%!assert(retmat(3,4)==0);