📄 som_connection.m
字号:
function C=som_connection(S)%SOM_CONNECTION Connection matrix for 'hexa' and 'rect' lattices%% C=som_connection(S)%% C=som_connection(sMap);% C=som_connection(sTopol);% C=som_connection({'hexa', [6 5], 'sheet'});%% Input and output arguments:% S (struct) map or topol struct% (cell array) a cell array of form {lattice, msize, shape}, where% lattice: 'hexa' or 'rect'% msize : 1x2 vector% shape : 'sheet', 'cyl or 'toroid' %% C (sparse) An NxN connection matrix, N=prod(msize)%% The function returns a connection matrix, e.g., for drawing% connections between map units in the function som_grid. Note that% the connections are defined only in the upper triangular part to% save some memory!! Function SOM_UNIT_NEIGHS does the same thing, % but also has values in the lower triangular. It is also slower.%% For more help, try 'type som_connection' or check out online documentation.% See also SOM_GRID, SOM_UNIT_NEIGHS.%%%%%%%%%%%%% DETAILED DESCRIPTION %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% som_connection%% PURPOSE% % To create a connection matrix of SOM 'hexa' and 'rect' negihborhoods%% SYNTAX%% C = som_connection(S)%% DESCRIPTION%% Creates a connection matrix of SOM 'hexa' and 'rect'% neighborhoods. The connections are defined only in the upper% triangular part to save some memory.% % Function SOM_UNIT_NEIGHS does the same thing, but also has values% in the lower triangular. It is also slower, except for % 'toroid' shape because in that case this function calls % SOM_UNIT_NEIGHS...%% REQUIRED INPUT ARGUMENTS% % S map topology % (map struct) S.topol is used to build the matrix% (topol struct) topology information is used to build the matrix% (cell array) of form {lattice, msize, shape}, where% lattice: 'hexa' or 'rect'% msize : 1x2 vector% shape : 'sheet', 'cyl or 'toroid' %% OUTPUT ARGUMENTS%% C (sparse) munits x munits sparse matrix which describes % nearest neighbor connections between units%% EXAMPLE %% C = som_connection('hexa',[3 4],'sheet');% full(C)% ans =%% 0 1 0 1 0 0 0 0 0 0 0 0% 0 0 1 1 1 1 0 0 0 0 0 0% 0 0 0 0 0 1 0 0 0 0 0 0% 0 0 0 0 1 0 1 0 0 0 0 0% 0 0 0 0 0 1 1 1 1 0 0 0% 0 0 0 0 0 0 0 0 1 0 0 0% 0 0 0 0 0 0 0 1 0 1 0 0% 0 0 0 0 0 0 0 0 1 1 1 1% 0 0 0 0 0 0 0 0 0 0 0 1% 0 0 0 0 0 0 0 0 0 0 1 0% 0 0 0 0 0 0 0 0 0 0 0 1% 0 0 0 0 0 0 0 0 0 0 0 0%% SEE ALSO% % som_grid Visualization of a SOM grid% som_unit_neighs Units in 1-neighborhood for all map units.% Copyright (c) 1999-2000 by the SOM toolbox programming team.% http://www.cis.hut.fi/projects/somtoolbox/ % Version 2.0alpha Johan 061099 juuso 151199 170400%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% Check argumentserror(nargchk(1, 1, nargin)); % check number of input arguments[tmp,ok,tmp]=som_set(S);if isstruct(S) & all(ok), % check m type switch S.type case 'som_topol' msize=S.msize; lattice=S.lattice; shape=S.shape; case 'som_map' msize=S.topol.msize; lattice=S.topol.lattice; shape=S.topol.shape; otherwise error('Invalid map or topol struct.'); endelseif iscell(S), if vis_valuetype(S,{'topol_cell'}), lattice=S{1}; msize=S{2}; shape=S{3}; else error('{lattice, msize, shape} expected for cell input.') endelse error('{lattice, msize, shape}, or map or topol struct expected.')endif ~vis_valuetype(msize,{'1x2'}) error('Invalid map size: only 2D maps allowed.')end %% Init %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%N=msize(1)*msize(2);%% Action & Build output arguments %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%switch latticecase 'hexa' l1=ones(N,1); l1((msize(1)+1):msize(1):end)=0; l2=zeros(msize(1),1); l3=l2; l2(1:2:end-1)=1; l3(3:2:end)=1; l2=repmat(l2,msize(2),1); l3=repmat(l3,msize(2),1); C= ... spdiags([l1 l2 ones(N,1) l3], [1 msize(1)-1:msize(1)+1],N,N);case 'rect' l1=ones(N,1);l1((msize(1)+1):msize(1):end)=0; C=spdiags([l1 ones(N,1)],[1 msize(1)],N,N);otherwise error('Unknown lattice.')endswitch shapecase 'sheet' ;case 'cyl' C=spdiags(ones(N,1),msize(1)*(msize(2)-1),C);case 'toroid' %warning('Toroid not yet implemented: using ''cyl''.'); %C=spdiags(ones(N,1),msize(1)*(msize(2)-1),C); %l=zeros(N,1); l(1:msize(2):end)=1; %C=spdiags(l,msize(1),C); % use som_unit_neighs to calculate these C = som_unit_neighs(msize,lattice,'toroid'); % to be consistent, set the lower triangular values to zero munits = prod(msize); for i=1:(munits-1), C((i+1):munits,i) = 0; endotherwise error('Unknown shape.');end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -