数据任然选择聚类分析2中数据;
程序用python编程。
准备
%将maltab中将m数据文件转化为txt文本文件。
程序
#------------------导入读取数据
import numpy as np fi=open("D:\\alsun\data.txt") lin=fi.readlines() fi.close() data=np.ones([100,200]) for i,lines in enumerate(lin): data[i][:]=lines.split("\t") data1=zip(*data) #data2=[i for i in data1] data2=list(data1) data3=np.array(data2)
#------------距离矩阵计算 ycdata=np.zeros([200,200]) for i in range(200): for j in range(200): dc=data3[i]-data3[j] dc=dc**2 dt=sum(dc) dt=dt**0.5 ycdata[i][j]=dt z=[0,1] err=1 n=1 u=np.ones([2,200])
#-----------k-means算法 while err>0.05: n=n+1 m=[ycdata[line] for line in z] u[0][:]=list(map(int,(m[1]>m[0]))) u[1][:]=list(map(int,(m[1]<=m[0]))) sum1=np.inner(m,u) sum2=sum1[1][1]+sum1[0][0] err=sum2-err sort1=[] sort2=[] for i,j in enumerate(u[0][:]): summ=0 if j: sum3=np.inner(u[0][:],ycdata[i][:]) sort1.append(sum3) else: sum4=np.inner(u[1][:],ycdata[i][:]) sort2.append(sum4) sum5=np.sort(sort1) sum6=np.sort(sort2) z[0]=list(sort1).index(sum5[0]) z[1]=list(sort2).index(sum6[0]) print(u)
输出结果
[[ 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]