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