function [gIdx,c]=k_means(X,k)
[n,m]=size(X);
g0=ones(n,1);
gIdx=zeros(n,1);
D=zeros(n,k);
c=X(ceil(rand(k,1)*n),:);
while any(g0~=gIdx)
g0=gIdx;
for t=1:k
d=zeros(n,1);
for s=1:m
d=d+(X(:,s)-c(t,s)).^2;
end
D(:,t)=d;
end
[z,gIdx]=min(D,[],2);
for t=1:k
c(t,:)=mean(X(gIdx==t,:));
end
[n,m]=size(X);
g0=ones(n,1);
gIdx=zeros(n,1);
D=zeros(n,k);
c=X(ceil(rand(k,1)*n),:);
while any(g0~=gIdx)
g0=gIdx;
for t=1:k
d=zeros(n,1);
for s=1:m
d=d+(X(:,s)-c(t,s)).^2;
end
D(:,t)=d;
end
[z,gIdx]=min(D,[],2);
for t=1:k
c(t,:)=mean(X(gIdx==t,:));
end
end
输出gIdx为分类的数组,c为最后迭代的均值点。k为分组数。