资源简介

使用Python脚本写的一个简单的ISODATA算法

资源截图

代码片段和文件信息

class point(object):
    x=0.0
    y=0.0
pointF=[]
pointType=[]#记录点属于的类
AverageD=[]# 记录每个聚类的均值
ZArray=[]


StdDiff=[]   # 记录聚类样本中心标准差值
Std=[]       #标准聚类中心
Sum=[]       #求和临时
N=[]          #记录每个聚类书面

StdDistance=[] #聚类中心之间距离
StdDisMax=[]
StdDisMaxCor=[]

MaxDiff=1        #标准差判定区间 
MinDistance=2    #不同聚类中心最小距离
MaxNumStd=4      #最大的聚类中心数目
TotalNum=10       #点数

SAArray=[[]]
ZDistance=[]
ZDistanceR=[]
ZDistanceC=[]
StdTime=10
Nc=4
step=2             #记录步骤及当前状态
CountTime=0
#---------------------------------初始化
for i in range(TotalNum):
    pointF+=[point()]
    pointType+=[0]
    StdDiff+=[point()]
    ZDistance+=[0]
    ZDistanceR+=[0]
    ZDistanceC+=[0]
for i in range(MaxNumStd):
    AverageD+=[0]
    Std+=[point()]
    Sum+=[point()]
    ZArray+=[point()]
    N+=[0]
for i in range(MaxNumStd):
    StdDistance+=[point()]
    StdDisMax+=[0]
    StdDisMaxCor+=[0]
for i in range(TotalNum):
    SAArray+=[[]]
    for j in range(TotalNum):
        SAArray[i]+=[point()]
 
[pointF[0].xpointF[0].y]=[0.00.0]    
[pointF[1].xpointF[1].y]=[3.08.0]
[pointF[2].xpointF[2].y]=[2.02.0]
[pointF[3].xpointF[3].y]=[1.01.0]
[pointF[4].xpointF[4].y]=[5.03.0]
[pointF[5].xpointF[5].y]=[4.08.0]
[pointF[6].xpointF[6].y]=[6.03.0]
[pointF[7].xpointF[7].y]=[5.04.0]
[pointF[8].xpointF[8].y]=[6.04.0]    
[pointF[9].xpointF[9].y]=[7.05.0]
[ZArray[0].xZArray[0].y]=[00]
[ZArray[1].xZArray[1].y]=[38]
[ZArray[2].xZArray[2].y]=[22]
[ZArray[3].xZArray[3].y]=[11]
#----------------------------------函数定义区
def DistancePoint(x1y1x2y2):
    return ((x1-x2)**2+(y1-y2)**2)**0.5
def DistancePointF(ab):
    return ((a.x-b.x)**2+(a.y-b.y)**2)**0.5
def ComputeNumStd(TypeList):
    temp=pointType[7]
    for i in range(6):
        if temp            temp=pointType[i]
    return temp+1
while(CountTime<=StdTime):
    if step==2:
        for i in range(Nc):
            N[i]=0
        print ‘这是第%d次归类‘%CountTime
        CountTime=CountTime+1
        stdtemp=0
        for i in range(TotalNum):
            dis=65535
            for j in range(Nc):
                ftemp=DistancePointF(pointF[i]ZArray[j])
                if ftemp                    stdtemp=j
                    dis=ftemp
            SAArray[stdtemp][N[stdtemp]].x=pointF[i].x
            SAArray[stdtemp][N[stdtemp]].y=pointF[i].y
            N[stdtemp]=N[stdtemp]+1
        for i in range(Nc):
            print “第%d个聚类中心是:(%d%d)拥有%d个元素   “%(iZArray[i].xZArray[i].yN[i])
            print “包含的元素有:“
            for j in range(N[i]):
                print “(%d%d)“%(SAArray[i][j].xSAArray[i][j].y)
        step=3   #跳转到第三步
        #break
    if step==3:
        print“第%d步,判断是否可以去掉一些“%step
        for i in range(Nc):
            if N[i]<1: #1也可以为其他形参
                #取消这个样本子集
                for j in range(TotalNum):
                    if pointType[j]==i:
                        poin

评论

共有 条评论