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

📄 sompak_init.m

📁 it is matlab code , som(slef organizing map) tool for matlab
💻 M
字号:
function sMap=sompak_init(sData,ft,init_type,cout,ct,xdim,ydim,topol,neigh)%SOMPAK_INIT Call SOM_PAK initialization programs from Matlab.%% sMap=sompak_init(sData,ft,init_type,cout,ct,xdim,ydim,topol,neigh)%% ARGUMENTS  ([]'s are optional and can be given as empty: [] or '')%  sData      (struct) data struct%             (matrix) data matrix%             (string) filename%  [ft]       (string) 'pak' or 'box'. Argument must be defined, if input%                      file is used.%  init_type  (string) string 'rand' or 'linear'%  [cout]     (string) filename for output SOM, if argument is not defined%                      (i.e. argument is '[]') temporary file '__abcdef' is%                      used in operations and *it_is_removed* after %                      operations!!!%  [ct]       (string) 'pak' or 'box'. Argument must be defined, if output%                      file is used.%  xdim       (scalar) Number of units of the map in x-direction.%  ydim       (scalar) Number of units of the map in y-direction.%  topol      (string) string 'hexa' or 'rect'%  neigh      (string) string 'bubble' or 'gaussian'.%% RETURNS%  sMap       (struct) map struct%% Calls SOM_PAK initialization programs (randinit and lininit) from% Matlab. Notice that to use this function, the SOM_PAK programs must% be in your search path, or the variable 'SOM_PAKDIR' which is a% string containing the program path, must be defined in the% workspace. SOM_PAK programs can be found from:% http://www.cis.hut.fi/research/som_lvq_pak.shtml%  % See also SOMPAK_TRAIN, SOMPAK_SAMMON, SOMPAK_INIT_GUI,%          SOMPAK_GUI, SOM_LININIT, SOM_RANDINIT.% Contributed to SOM Toolbox vs2, February 2nd, 2000 by Juha Parhankangas% Copyright (c) by Juha Parhankangas% http://www.cis.hut.fi/projects/somtoolbox/% Juha Parhankangas 050100nargchk(9,9,nargin);NO_FILE = 0;if isstruct(sData);  sData=sData.data;elseif ~(isreal(sData) | isstr(sData))  error('Argument ''sData'' must be a struct or a real matrix.');else  if isempty(ft)    if isstr(sData)      error('Argument ''file_type'' must be defined when input file is used.');    end  elseif strcmp(ft,'pak');    sData=som_read_data(sData);  elseif strcmp(ft,'box')    new_var=diff_varname;    varnames=evalin('base','who');    loadname=eval(cat(2,'who(''-file'',''',sData,''')'));    if any(strcmp(loadname{1},evalin('base','who')))      assignin('base',new_var,evalin('base',loadname{1}));      evalin('base',cat(2,'load(''',sData,''');'));      new_var2=diff_varname;      assignin('base',new_var2,evalin('base',loadname{1}));      assignin('base',loadname{1},evalin('base',new_var));      evalin('base',cat(2,'clear ',new_var));      sData=evalin('base',new_var2);      evalin('base',cat(2,'clear ',new_var2));    else      evalin('base',cat(2,'load(''',sData,''');'));      sData=evalin('base',loadname{1});      evalin('base',cat(2,'clear ',loadname{1}));    end                else    error('Argument ''ft'' must be a string ''pak'' or ''box''.');  endendif isstr(init_type)  if strcmp(init_type,'rand')    if any(strcmp('SOM_PAKDIR',evalin('base','who')))      init_command=cat(2,evalin('base','SOM_PAKDIR'),'randinit');    else      init_command='randinit';    end  elseif strcmp(init_type,'linear')    if any(strcmp('SOM_PAKDIR',evalin('base','who')))      init_command=cat(2,evalin('base','SOM_PAKDIR'),'lininit');    else      init_command='lininit';    end  else    error('Argument ''init_type'' must be string ''rand'' or ''linear''.');  endelse  error('Argument ''init_type'' must be string ''rand'' or ''linear''.');endif (isstr(cout) & isempty(cout)) | (~isstr(cout) & isempty(cout))  NO_FILE = 1;  cout = '__abcdef';elseif  ~isstr(cout) & ~isempty(cout)  error('Argument ''cout'' must be a string or ''[]''.');end  if ~is_positive_integer(xdim)  error('Argument ''xdim'' must be a positive integer.');endif ~is_positive_integer(ydim)  error('Argument ''ydim'' must be a positive integer.');endif isstr(topol)  if isempty(topol) | (~strcmp(topol,'hexa') & ~strcmp(topol,'rect'))    error ('Argument ''topol'' must be either a string ''hexa'' or ''rect''.');  endelse  error ('Argument ''topol'' must be either a string ''hexa'' or ''rect''.');  endif isstr(neigh)  if isempty(neigh) | (~strcmp(neigh,'bubble') & ~strcmp(neigh,'gaussian'))    error(sprintf(cat(2,'Argument ''neigh'' must be either a string ',...                        '''bubble'' or ''gaussian''.')));  endelse  error(sprintf(cat(2,'Argument ''neigh'' must be either a string ',...                       '''bubble'' or ''gaussian''.')));endsom_write_data(sData, cout); str=cat(2,init_command,sprintf(' -din %s -cout %s ', cout ,cout),...           sprintf('-topol %s ',topol),...           sprintf('-neigh %s ',neigh),...           sprintf('-xdim %d -ydim %d',xdim,ydim));if isunix  unix(str);else  dos(str);endsMap=som_read_cod(cout);if ~NO_FILE    if isunix      unix(cat(2,'/bin/rm ',cout));    else      dos(cat(2,'del ',cout));    end    if strcmp(ct,'pak')      som_write_cod(sMap,cout);      disp(cat(2,'Output written to the file ',cout,'.'));    elseif strcmp(ct,'box')      eval(cat(2,'save ',cout,' sMap'));	      disp(cat(2,'Output written to the file ',sprintf('''%s.mat''.',cout)));    endelse  sMap.name=cat(2,'SOM ',date);  if isunix	    unix('/bin/rm __abcdef');  else    dos('del __abcdef');  endend%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function bool = is_positive_integer(x)bool = ~isempty(x) & isreal(x) & all(size(x) == 1) & x > 0;if ~isempty(bool)  if bool & x~=round(x)    bool = 0;  endelse  bool = 0;end%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%function str = diff_varname();array=evalin('base','who');if isempty(array)  str='a';  return;endfor i=1:length(array)  lens(i)=length(array{i});endind=max(lens);str(1:ind+1)='a';%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

⌨️ 快捷键说明

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