⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 som_set.m

📁 一个经典的ICA算法的程序包
💻 M
📖 第 1 页 / 共 2 页
字号:
function [sS, ok, msgs] = som_set(sS, varargin)%SOM_SET Create and check SOM Toolbox structs, give values to their fields.%% [sS, ok, msgs] = som_set(sS, [field, contents, ...])%%   sM              = som_set(sM,'name','SOM#1.1');%   [dummy,ok,msgs] = som_set(sData);   %   sT              = som_set('som_topol','msize',[10 10],'lattice','hexa');%   [sTrain,ok]     = som_set(sTrain,'algorithm','lininit');%   [sN,ok,msgs]    = som_set('som_norm');%% Input and output arguments ([]'s are optional):%  sS                   the target struct%              (struct) a SOM Toolbox structure (not visualization struct)%              (string) structure identifier (see below)%                       the updated/created structure is returned%  [field,     (string) field to be given value to (see below)%   contents]  (varies) the contents for the field%%  ok          (vector)  status for each field-contents pair (1=ok)%  msgs        (cellstr) status string for each field-contents pair (''=ok)%%  There can be arbitrarily many field-contents pairs. If there%  are _no_ field-content pairs, and the first argument is a struct,%  the fields of the struct are checked for validity.% %  Valid struct and corresponding field identifiers: %  'som_map'   : 'codebook', 'labels', 'mask', 'neigh', 'name', %                'topol', 'msize, 'lattice', 'shape',%                'trainhist', 'comp_names', 'comp_norm', %  'som_data'  : 'data', 'labels', 'name', 'comp_names', 'comp_norm', %                'label_names'%  'som_topol' : 'msize', 'lattice', 'shape'%  'som_norm'  : 'method', 'params', 'status'%  'som_train' : 'algorithm', 'data_name', 'mask', 'neigh', %                'radius_ini', 'radius_fin', 'alpha_ini', 'alpha_type', %                'trainlen', 'time'%  'som_grid'  : 'lattice', 'shape', 'msize', 'coord',%                'line', 'linecolor', 'linewidth', %                'marker', 'markersize', 'markercolor', 'surf', %                'label', 'labelcolor', 'labelsize'%                checking given values has not been implemented yet!%                % For more help, try 'type som_set' or check out online documentation.% See also SOM_INFO, SOM_MAP_STRUCT, SOM_DATA_STRUCT, SOM_VS1TO2.%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% som_set%% PURPOSE%% Create and set values for fields of SOM Toolbox structs (except% visualization struct). Can also be used to check the validity of structs.%% SYNTAX%%  sMap   = som_set('som_map');%  sData  = som_set(sData);%  sNorm  = som_set(...,'field',contents,...);%  [sTopol,ok]      = som_set(sTopol,...);%  [sTrain,ok,msgs] = som_set('som_train',...);%% DESCRIPTION%% The function is used to create and set values for fields of SOM% Toolbox structs, except visualization structs. The given values are% first checked for validity, and if they are not valid, an error% message is returned. The function can also be used to check the% validity of all the fields of the struct by supplying a struct as% the first and only argument.% % NOTE: Using SOM_SET to create structures does _not_ guarantee that the% structs are valid (try e.g. sM = som_set('som_map'); som_set(sM)). The% initial values that the function gives to the fields of the structs are% typically invalid. It is recommended that when creating map or data % structs, the corresponding functions SOM_MAP_STRUCT and SOM_DATA_STRUCT % are used instead of SOM_SET. However, when giving values for the fields, % SOM_SET tries to guarantee that the values are valid.%% If a string is given as the first argument, the corresponding % structure is first created and the field-content pairs are then% applied to it. %% There can be arbitrarily many field-contents pairs. The pairs% are processed sequentially one pair at a time. For each pair,% the validity of the contents is checked and the corresponding % items in the returned 'ok'-vector and 'msgs'-cellstring are set.% - if the contents is ok, the status is set to 1 and message to ''% - if the contents is suspicious, status is set to 1, but a%   message is produced% - if the contents is invalid, status is set to 0 and an error%   message is produced. The contents are _not_ given to the field.% If there is only one output argument, the status and messages% for each pair are printed to standard output.%% The different field-contents pairs have no effect on each other.% If a field is given a value multiple times, the last valid one % stays in effect.% % In some cases, the order of the given fields is significant.% For example in the case of 'som_map', the validity of some fields, % like '.comp_names', depends on the input space dimension, which is% checked from the '.data' field (dim = size(sD.data,2) to be specific).% Therefore, the '.data' field (or '.codebook' field in case of map % struct) should always be given a value first. Below is a list of % this kind of dependancies:% % som_map:   'comp_names', 'comp_norm', 'msize', 'topol.msize',%            'labels' and 'mask' depend on 'codebook'%            new value for 'codebook' should have equal size to the old%            one (unless the old one was empty)% som_data:  'comp_names' and 'comp_norm' depend on 'data'%            new value for 'data' should have equal dimension (size(data,2))%            as the old one (unless the old one was empty)% % KNOWN BUGS%% Checking the values given to som_grid struct has not been% implemented. Use SOM_GRID function to give the values.%% REQUIRED INPUT ARGUMENTS%%  sS          The struct.%     (struct) A SOM Toolbox struct.%     (string) Identifier of a SOM Toolbox struct: 'som_map', %              'som_data', 'som_topol', 'som_norm' or 'som_train'%   % OPTIONAL INPUT ARGUMENTS %%  field     (string) Field identifier string (see below).%  contents  (varies) Value for the field (see below).%%  Below is the list of valid field identifiers for the different %  SOM Toolbox structs. %%  'som_map' (map struct)%    'codebook'    : matrix, size [munits, dim] %    'labels'      : cell array of strings, %                    size [munits, maximum_number_of_labels]%    'topol'       : topology struct (prod(topol.msize)=munits)%    'mask'        : vector, size [dim, 1]%    'neigh'       : string ('gaussian' or 'cutgauss' or 'bubble' or 'ep')%    'trainhist'   : struct array of train structs%    'name'        : string%    'comp_names'  : cellstr, size [dim, 1], e.g. {'c1','c2','c3'}%    'comp_norm'   : cell array, size [dim, 1], of cell arrays %                    of normalization structs%    Also the following can be used (although they are fields%    of the topology struct)%    'msize'       : vector (prod(msize)=munits)%    'lattice'     : string ('rect' or 'hexa')%    'shape'       : string ('sheet' or 'cyl' or 'toroid')%%  'som_data' (data struct)%    'data'        : matrix, size [dlen, dim]%    'name'        : string%    'labels'      : cell array of strings, %                    size [dlen, m]%    'comp_names'  : cellstr, size [dim, 1], e.g. {'c1','c2','c3'}%    'comp_norm'   : cell array, size [dim, 1], of cell arrays %                    of normalization structs%    'label_names' : cellstr, size [m, 1]%% 'som_topol' (topology struct)%    'msize'       : vector%    'lattice'     : string ('rect' or 'hexa')%    'shape'       : string ('sheet' or 'cyl' or 'toroid')%% 'som_norm' (normalization struct)%    'method'      : string%    'params'      : varies%    'status'      : string ('done' or 'undone' or 'uninit')%% 'som_train' (train struct)%    'algorithm'   : string ('seq' or 'batch' or 'lininit' or 'randinit')%    'data_name'   : string%    'mask'        : vector, size [dim, 1]%    'neigh'       : string ('gaussian' or 'cutgauss' or 'bubble' or 'ep')%    'radius_ini'  : scalar%    'radius_fin'  : scalar%    'alpha_ini'   : scalar%    'alpha_type'  : string ('linear' or 'inv' or 'power')%    'trainlen'    : scalar%    'time'        : string%% 'som_grid' (grid struct) : checking the values has not been implemented yet!%    'lattice'     : string ('rect' or 'hexa') or %                    (sparce) matrix, size munits x munits%    'shape'       : string ('sheet' or 'cyl' or 'toroid')%    'msize'       : vector, size 1x2%    'coord'       : matrix, size munits x 2 or munits x 3%    'line'        : string (linespec, e.g. '-', or 'none')%    'linecolor'   : RGB triple or string (colorspec, e.g. 'k') or %                    munits x munits x 3 (sparce) matrix or cell%                    array of RGB triples %    'linewidth'   : scalar or munits x munits (sparce) matrix%    'marker'      : string (markerspec, e.g. 'o', or 'none') or %                    munits x 1 cell or char array of these%    'markersize'  : scalar or munits x 1 vector%    'markercolor' : RGB triple or string (colorspec, e.g. 'k')%    'surf'        : [], munits x 1 or munits x 3 matrix of RGB triples%    'label'       : [] or munits x 1 char array or %                    munits x l cell array of strings %    'labelcolor'  : RGB triple or string (colorspec, e.g. 'g' or 'none')%    'labelsize'   : scalar%% OUTPUT ARGUMENTS% %  sS    (struct)  the created / updated struct%  ok    (vector)  length = number of field-contents pairs, gives%                  validity status for each pair (0=invalid, 1 otherwise)%  msgs  (cellstr) length = number of field-contents pairs, gives%                  error/warning message for each pair ('' if ok)%% EXAMPLES%% To create a struct:%  sM  = som_set('som_map');%  sD  = som_set('som_data');%  sTo = som_set('som_topol');%  sTr = som_set('som_train');%  sN  = som_set('som_norm');%  sG  = som_set('som_grid');%% To check the the contents of a struct: %  som_set(sS);%  [dummy,ok]      = som_set(sS);%  [dummy,ok,msgs] = som_set(sS);%% To give values to fields: %  sTo = som_set(sTo,'msize',[10 10],'lattice','hexa','shape','toroid');%  sM  = som_set('som_map','codebook',rand(100,4),'topol',sTo);%   % SEE ALSO% %  som_info         Prints information the given struct.%  som_map_struct   Create map struct.%  som_data_struct  Create data struct.%  som_topol_struct Create topology struct.%  som_train_struct Create training struct.%  som_grid         Create and visualize grid struct.%  som_vs1to2       Conversion from version 1.0 structs to 2.0.%  som_vs2to1       Conversion from version 2.0 structs to 1.0.% Copyright (c) 1999-2000 by the SOM toolbox programming team.% http://www.cis.hut.fi/projects/somtoolbox/% Version 2.0beta juuso 101199 130300%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% create struct if necessaryif ischar(sS),   switch sS   case 'som_map',    sS=struct('type', 'som_map', ...              'codebook', [], ...              'topol', som_set('som_topol'), ...              'labels', cell(1), ...              'neigh', 'gaussian', ...              'mask', [], ...              'trainhist', cell(1), ...              'name', '',...              'comp_names', {''}, ...              'comp_norm', cell(1));   case 'som_data',     sS=struct('type', 'som_data', ...              'data', [], ...              'labels', cell(1), ...              'name', '', ...              'comp_names', {''}, ...              'comp_norm', cell(1), ...              'label_names', []);   case 'som_topol',    sS=struct('type', 'som_topol', ...              'msize', 0, ...              'lattice', 'hexa', ...              'shape', 'sheet');   case 'som_train',    sS=struct('type', 'som_train', ...              'algorithm', '', ...              'data_name', '', ...              'neigh', 'gaussian', ...              'mask', [], ...              'radius_ini', NaN, ...              'radius_fin', NaN, ...              'alpha_ini', NaN, ...              'alpha_type', 'inv', ...              'trainlen', NaN, ...              'time', '');   case 'som_norm',    sS=struct('type', 'som_norm', ...              'method', 'var', ...              'params', [], ...              'status', 'uninit');   case 'som_grid',     sS=struct('type','som_grid',...	      'lattice','hexa',...	      'shape','sheet',...	      'msize',[1 1],...	      'coord',[],...	      'line','-',...	      'linecolor',[.9 .9 .9],...	      'linewidth',0.5,...	      'marker','o',...	      'markersize',6,...	      'markercolor','k',...	      'surf',[],...	      'label',[],...	      'labelcolor','g',...	      'labelsize',12);       otherwise    ok=0; msgs = {['Unrecognized struct type: ' sS]}; sS = [];    return;  end    elseif isstruct(sS) & length(varargin)==0,     % check all fields  fields = fieldnames(sS);  if ~any(strcmp('type',fields)),     error('The struct has no ''type'' field.');  end  k = 0;  for i=1:length(fields),     contents = getfield(sS,fields{i});    if ~strcmp(fields{i},'type'),       varargin{k+1} = fields{i};      varargin{k+2} = contents;      k = k + 2;    else       if ~any(strcmp(contents, ...        {'som_map','som_data','som_topol','som_train','som_norm'})), 	error(['Unknown struct type: ' contents]);      end    end  end  end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% set field valuesp = ceil(length(varargin)/2);ok = ones(p,1);msgs = cell(p,1);for i=1:p,   field = varargin{2*i-1};   content = varargin{2*i};  msg = '';  isok = 0;    si = size(content);  isscalar = (prod(si)==1);  isvector = (sum(si>1)==1);  isrowvector = (isvector & si(1)==1);  if isnumeric(content),     iscomplete = all(~isnan(content(:)));     ispositive = all(content(:)>0);     isinteger  = all(content(:)==ceil(content(:)));    isrgb = all(content(:)>=0 & content(:)<=1) & size(content,2)==3;  end    switch sS.type,    case 'som_map',    [munits dim] = size(sS.codebook);    switch field,      case 'codebook',       if ~isnumeric(content), 	msg = '''codebook'' should be a numeric matrix';       elseif size(content) ~= size(sS.codebook) & ~isempty(sS.codebook), 	msg = 'New ''codebook'' must be equal in size to the old one.';       elseif ~iscomplete, 	msg = 'Map codebook must not contain NaN''s.';       else	sS.codebook = content; isok=1;      end     case 'labels',       if isempty(content), 	sS.labels = cell(munits,1); isok = 1;      elseif size(content,1) ~= munits, 	msg = 'Length of labels array must be equal to the number of map units.';      elseif ~iscell(content) & ~ischar(content), 	msg = '''labels'' must be a string array or a cell array/matrix.';      else	isok = 1;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -