somtoolbox2/som_fillnans.m
4dbef185
 function sD = som_fillnans(sD,sM,bmus)
 
 % SOM_FILLNANS Replaces NaNs in the data matrix with values from
 %              SOM prototypes. 
 %
 %   sD = som_fillnans(sD,sM, [bmus])
 %
 %      sD      (struct) data struct
 %              (matrix) size dlen x dim
 %      sM      (struct) data struct, with .data of size dlen x dim
 %              (matrix) size dlen x dim, a matrix from which 
 %                       the values are taken from directly
 %              (struct) map struct: replacement values are taken from 
 %                       sM.codebook(bmus,:)
 %      [bmus]  (vector) BMU for each data vector (calculated if not specified)
 %
 % See also  SOM_MAKE.
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 if isstruct(sD), 
   [dlen dim] = size(sD.data); 
   nans = find(isnan(sD.data)); 
 else
   [dlen dim] = size(sD); 
   nans = find(isnan(sD)); 
 end
 
 if nargin<3, 
   bmus = som_bmus(sM,sD);   
 end
 
 if isstruct(sM) & strcmp(sM.type,'som_map'),
   sM = sM.codebook(bmus,:); 
 elseif isstruct(sM), 
   sM = sM.data(bmus,:);   
 else
   sM = sM(bmus,:);
 end
 me = mean(sM); 
 
 if any(size(sM) ~= [dlen dim]), 
   error('Invalid input arguments.')
 end
 
 if isstruct(sD), 
   sD.data(nans) = sM(nans); 
 else
   sD(nans) = sM(nans); 
 end
   
 return; 
 
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%