diff toolboxes/MIRtoolbox1.3.2/somtoolbox/som_divide.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/som_divide.m	Tue Feb 10 15:05:51 2015 +0000
@@ -0,0 +1,96 @@
+function [V,I]=som_divide(sMap, D, inds, mode)
+
+%SOM_DIVIDE Divides a dataset according to a given map.
+%
+% [V,I]=som_divide(sMap, sData, [inds], [mode])
+%
+% ARGUMENTS ([]'s are optional) 
+%
+%  sMap     (struct or matrix) map struct or codebook (size munits x dim)
+%  sData    (struct or matrix) data struct or matrix (size N x dim )
+%  [inds]            From which map units should the local data sets
+%                    be constructed. Interpretation depends on mode
+%                    argument. By default [1:munits].
+%           'class': (vector) munits x 1 matrix of class numbers
+%           'index': (vector) K x 1 vector of map node indexes 
+%           'index': (matrix) K x k matrix of map node subscripts
+%  [mode]   (string) 'index' or 'class', if inds is a vector of length 
+%                    munits, default is 'class', otherwise 'index'.
+% RETURNS
+%  
+% If mode == 'index' 
+%  V        (matrix) data vectors hitting the specified nodes (size K x dim)                   
+%  I        (vector) corresponding data row indexes (size K x 1)
+%   
+% If mode == 'class' (this can be used after using som_select)
+%  V        (cell array) V{K} includes vectors whose BMU has class number 
+%                        K in the input matrix 'coord'. Note that 
+%                        values of K below 1 are ignored. 
+%  I        (cell array) corresponding data indexes in the cell array                        
+%
+% NOTE: if the same node is specified multiple times, only one
+%       set of hits is returned.
+%
+% See also SOM_BMU, SOM_HITS, SOM_SELECT.
+
+% Version 1.0beta 260997 Johan 
+% Version 2.0beta 230300 juuso
+
+% Contributed to SOM Toolbox vs2, Mar 23rd, 2000 by Juha Vesanto
+% http://www.cis.hut.fi/projects/somtoolbox/
+
+%%%% Init & Check %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
+
+error(nargchk(0, 4, nargin)) % check if no. of input args is correct
+
+% map
+if isstruct(sMap), 
+  msize = sMap.topol.msize;     
+  dim = size(sMap.codebook,2); 
+else
+  msize = [size(sMap,1) 1];
+  dim = size(sMap,2); 
+end
+munits = prod(msize);
+
+% data
+if isstruct(D), D=D.data; end
+
+% inds
+if nargin<3, inds = 1:munits; end
+isvec = prod(size(inds))==length(inds);
+
+% mode
+if nargin<4, 
+  if isvec & length(inds)==munits, 
+    mode = 'class'; 
+  else
+    mode = 'index'; 
+  end
+end
+
+%%% Action & Build output according to the mode string output
+
+if ~isvec, inds = som_sub2ind(msize,inds); end
+
+bmus=som_bmus(sMap,D); 
+
+switch mode
+ case 'index'
+  I=find(ismember(bmus,inds));         
+  V=D(I,:);
+ case 'class'   
+  K=max(inds); % classes  
+  V = cell(K,1); 
+  I = cell(K,1);
+  for i=1:K,
+    N_ind=find(inds == i);           % indexes of the units of class i
+    I{i}=find(ismember(bmus,N_ind)); % data indexes       
+    V{i}=D(I{i},:);
+  end
+end
+
+
+
+
+