📄 clustermatlab.txt
字号:
cArrSize=6;
cArr=zeros(cArrSize,cArrSize);
copyCArr=zeros(cArrSize,cArrSize);
cBoolArr=zeros(cArrSize,cArrSize);
dataArrRow=6;
dataArrCol=4;
dataArr=zeros(dataArrRow,dataArrCol);
%--filling data in data arr--%
dataArr=[0.9434 0.0476 0.0625 0.2083;
0.2994 0.2236 0.5 1;
0.8065 0.0555 0.0833 0.25;
0.2463 0.0685 0.1429 0.5;
0.1355 0.0435 0.0714 1;
0.1056 0.0379 0.0208 0.8333];
%--cal dis between arr(i,j)--%
%-----using cos method-----%
for i=1:dataArrRow
for j=i+1:dataArrRow
tmpDotSum=0;
tmpLen=0;tmpLen1=0;tmpLen2=0;
for m=1:dataArrCol
tmpDotSum=tmpDotSum+dataArr(i,m)*dataArr(j,m);
tmpLen1=tmpLen1+dataArr(i,m)^2;
tmpLen2=tmpLen2+dataArr(j,m)^2;
end
tmpLen=sqrt(tmpLen1)*sqrt(tmpLen2);
cArr(i,j)=tmpDotSum/tmpLen;
end
end
%--make the full c arr --%
for i=1:dataArrRow
for j=1:i-1
cArr(i,j)=cArr(j,i);
end
cArr(i,i)=1;
end
%--washall enclosure algorithm--%
unchanged=0;
while unchanged==0
unchanged=1;
%--sigma:i=1:n(combine(conj(cArr(i,k),cArr(k,j))))
for i=1:cArrSize
for j=1:cArrSize
mergeVal=0;
for k=1:cArrSize
if(cArr(i,k)<=cArr(k,j)&&cArr(i,k)>mergeVal)
mergeVal=cArr(i,k);
else if(cArr(i,k)>cArr(k,j)&&cArr(k,j)>mergeVal)
mergeVal=cArr(k,j);
end
end
end
if(mergeVal>cArr(i,j))
copyCArr(i,j)=mergeVal;
unchanged=0;
else
copyCArr(i,j)=cArr(i,j);
end
end
end
%--copy back--%
for i=1:cArrSize
for j=1:cArrSize
cArr(i,j)=copyCArr(i,j);
end
end
end
%--cluster--%
limitLine=1;
limitStep=0.1;
expectedLimit=0.6;
comArr=zeros(1,cArrSize);
groupIndentifyArr=zeros(1,cArrSize);
groupDelegateArr=zeros(1,cArrSize);
groupNum=1;
while(limitLine>=expectedLimit)
for i=1:cArrSize
for j=1:cArrSize
if(cArr(i,j)<limitLine)
cBoolArr(i,j)=0;
else
cBoolArr(i,j)=1;
end
end
end
%--make the comparation arr--%
for j=1:cArrSize
tempVal=0;
for i=1:cArrSize
tempVal=tempVal+cBoolArr(i,j)*2^(i-1);
end
comArr(j)=tempVal;
end
%--core part: pation the equivalence class--%
%--initialize part--%
groupIndentifyArr(1)=1;
groupDelegateArr(1)=1;
groupNum=1;
%--main part of the algorithm--%
for i=2:cArrSize
flag=0;
for count=1:groupNum
if(comArr(groupDelegateArr(count))==comArr(i))
groupIndentifyArr(i)=count;
flag=1;
break;
end
end
%--attention ,in matlab ,the exit val for count in for iteration is groupNum--%
if(flag==0) %--here can't use count==groupNum+1 as a judgement
groupNum=groupNum+1;
groupDelegateArr(groupNum)=i;
groupIndentifyArr(i)=groupNum;
end
end
limitLine=limitLine-limitStep;
end
groupIndentifyArr
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -