没有时间详细写了,直接贴代码吧。
%%%%%函数
function [index]=zzhKmean(x,num)
nData=size(x,1);
index=zeros(1,nData);
center=zeros(num,2);
for n=1:nData
index(n)=ceil(num*rand(1));
end
jud=1;
while jud==1
jud=0;
for n=1:num
center(n,1)=mean(x(find(index==n),1));
center(n,2)=mean(x(find(index==n),2));
end
for n=1:nData
ind=index(n);
dist=zeros(1,num);
Xn=x(n,:);
for m=1:num
dist(m)=norm(Xn-center(m,:));
end
indShould=find(dist==min(dist));
if indShould~=ind
jud=1;
index(n)=indShould;
end
end
end
%%%%%%%%%%%
%%%%%%%主程序,令k=3
x=rand(50,2);
index=zzhKmean(x,3);
x1=x(find(index==1),:);
x2=x(find(index==2),:);
x3=x(find(index==3),:);
plot(x1(:,1),x1(:,2),'r+');
hold on;
plot(x2(:,1),x2(:,2),'b+');
hold on;
plot(x3(:,1),x3(:,2),'g+');
%%%%%%%%%%
结果如图