用c语言写的kmeans算法,不是很完善

# include<stdio.h>
# include<time.h>
# include<math.h>
void main(){
int Ndata,Ncluster;
int data[128],cluster[128][128];
float distance[128][128];
int random;
int i,j;
int p1=1,p2=1,p3=1;//用于聚类时进行定位
printf("请输入数据项个数:");
scanf("%d",&Ndata);
printf("请输入聚类个数:");
scanf("%d",&Ncluster);
printf("请输入%d个数据项:\n",Ndata);
for(i=0;i<Ndata;i++){
scanf("%d",&data[i]);
}
printf("随机初始:");
srand((unsigned)time(NULL));
for(i=0;i<Ncluster;i++){
random=rand()%Ndata;
cluster[i][0]=data[random];
putchar('\n'); //换行用
printf("%d\t",cluster[i][0]);
}
putchar('\n'); //换行用
printf("距离情况:\n");
for(j=0;j<Ncluster;j++){
for(i=0;i<Ndata;i++){
distance[j][i]=sqrt(pow((cluster[j][0]-data[i]),2));
printf("%3.2f\t",distance[j][i]);
}
putchar('\n');  //换行用
}
for(i=0;i<Ndata;i++) //比较distance[0][i],distance[1][i],distance[2][i]的大小,并将最小的聚类到相应的cluster[i][j]中
{
  int temp,flag,tempdistance;//,temp用于存放data,flag用于存放“位置”的,tempdistance用于方便
  if(distance[0][i]<=distance[1][i]){
  temp=data[i];
  flag=0;
  tempdistance=distance[0][i];
  }
  else{
  temp=data[i];
  flag=1;
  tempdistance=distance[1][i];
  }
  if(distance[2][i]<=tempdistance){
  temp=data[i];
  flag=2;
  }
  switch(flag){
  case 0:cluster[flag][p1]=temp;p1++;break;  //太固定
  case 1:cluster[flag][p2]=temp;p2++;break;
  case 2:cluster[flag][p3]=temp;p3++;break;
  }
}
putchar('\n');
printf("聚类情况"); //有很多问题待搭建
putchar('\n');
for(j=0;j<=Ncluster;j++){
for(i=1;i<=Ndata;i++){
if(cluster[j][i]>=0)
printf("%d\n",cluster[j][i]);
}
putchar('\n');
}
}
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值