亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kmeans.cpp

?? 經典的K均值分類算法源碼
?? CPP
字號:
/****************************************************************************
 *                                                                           *
 *  KMEANS                                                                   *
 *                                                                           *
 *****************************************************************************/

#include < stdio.h>
#include < stdlib.h>
#include < string.h>
#include < conio.h>
#include < math.h> 

#define SUCCESS 1
#define FAILURE 0
#define TRUE 1
#define FALSE 0
#define MAXVECTDIM 4
#define MAXPATTERN 1588
#define MAXCLUSTER 10 
 
struct aCluster
    {
    double Center[MAXVECTDIM];
    int Member[MAXPATTERN]; //Index of Vectors belonging to this cluster
    int NumMembers;
};

struct aVector
    {
    double Center[MAXVECTDIM];
    int Size;
};

static double Pattern[MAXPATTERN][MAXVECTDIM + 1];
class System
{
  private :  
  aCluster Cluster[MAXCLUSTER];
  int NumPatterns; // Number of patterns
  int SizeVector; // Number of dimensions in vector
  int NumClusters; // Number of clusters
  void DistributeSamples(); // Step 2 of K-means algorithm

  int CalcNewClustCenters(); // Step 3 of K-means algorithm

  double EucNorm(int, int); // Calc Euclidean norm vector

  int FindClosestCluster(int); //ret indx of clust closest to pattern

  //whose index is arg
  public :
      System(){};

  int LoadPatterns(char * fname); // Get pattern data to be clustered

  void InitClusters(); // Step 1 of K-means algorithm

  void RunKMeans(); // Overall control K-means process

  void ShowClusters(); // Show results on screen

  void SaveClusters(char * fname); // Save results to file

  void ShowCenters();
 
};

void System::ShowCenters()
{
  int i;
  printf("Cluster centers:\n");
  for (i = 0; i < NumClusters; i++)
  {
    Cluster[i].Member[0] = i;
    printf("ClusterCenter[%d]=(%f,%f)\n", i, Cluster[i].Center[0],Cluster[i].Center[1]);
	int b=0;
  }
 // endfor  
  printf("\n");
}
 
int System::LoadPatterns(char * fname)
{
  FILE * InFilePtr;
  int i, j;
  double x;
  if ( (InFilePtr = fopen(fname, "r")) == NULL)
    return FAILURE;
  fscanf(InFilePtr, "%d", & NumPatterns); // Read # of patterns
  fscanf(InFilePtr, "%d", & SizeVector); // Read dimension of vector
  fscanf(InFilePtr, "%d", & NumClusters); // Read # of clusters for K-Means
  for (i = 0; i < NumPatterns; i++)
  { // For each vector
    for (j = 0; j < SizeVector; j++)
    { // create a pattern
      fscanf(InFilePtr, "%lg", & x); // consisting of all elements
      Pattern[i][j] = x;
    }
    // endfor 
  }
  // endfor  
  printf("Input patterns:\n");
  for (i = 0; i < NumPatterns; i++)
  {	   
     printf("Pattern[%d]=(%2.3f,%2.3f,%d,%d)\n", i, Pattern[i][0], Pattern[i][1],Pattern[i][2], Pattern[i][3]);
	 //printf("Pattern[%d]=(%2.3f,%2.3f)\n", i, Pattern[i][0], Pattern[i][1]);
  }
  //endfor  
  printf("\n--------------------\n");
  return SUCCESS;
}
//***************************************************************************
// InitClusters                                                             *
//   Arbitrarily assign a vector to each of the K clusters                  *
//   We choose the first K vectors to do this                               *
//***************************************************************************
void System::InitClusters()
{
  int i, j;
  SizeVector=2;
  printf("Initial cluster centers:\n");
  for (i = 0; i < NumClusters; i++)
  {
    Cluster[i].Member[0] = i;
    for (j = 0; j < SizeVector; j++)
    {
      Cluster[i].Center[j] = Pattern[i][j];
    }
     
  }
  
  for (i = 0; i < NumClusters; i++)
  {
    printf("ClusterCenter[%d]=(%f,%f)\n", i, Cluster[i].Center[0], Cluster[i].Center[1]);
  }
   
  printf("\n");
}

void System::RunKMeans()
{
  int converged;
  int pass;
  pass = 1;
  converged = FALSE;
  while (converged == FALSE)
  {
    printf("PASS=%d\n", pass++);
    DistributeSamples();
    converged = CalcNewClustCenters();
    ShowCenters();
  }// endwhile  
}
// Calc Euclidean norm of vector difference
double System::EucNorm(int p, int c)
{ 
  double dist, x; // between pattern vector, p, and cluster
  int i; // center, c.  
  dist = 0;
  for (i = 0; i < SizeVector; i++)
  {
    x = (Cluster[c].Center[i] - Pattern[p][i]) *
        (Cluster[c].Center[i] - Pattern[p][i]); 
    dist += (Cluster[c].Center[i] - Pattern[p][i]) *
        (Cluster[c].Center[i] - Pattern[p][i]);
  }
   
  return dist;
}

int System ::FindClosestCluster(int pat)
{
  int i, ClustID;
  double MinDist, d;
  MinDist = 9.9e+99;
  ClustID = -1;
  for (i = 0; i < NumClusters; i++)
  {
    d = EucNorm(pat, i);
    printf("Distance from pattern %d to cluster %d is %f\n", pat, i, sqrt(d));
    if (d < MinDist)
    {
      MinDist = d;
      ClustID = i;
    }    
  }   
  if (ClustID < 0)
  {
    printf("Aaargh");
    exit(0);
  }   
  return ClustID;
}

void System ::DistributeSamples()
{
  int i, pat, Clustid, MemberIndex;
//Clear membership list for all current clusters
  for (i = 0; i < NumClusters; i++)
  {
    Cluster[i].NumMembers = 0;
  }
  for (pat = 0; pat < NumPatterns; pat++)
  {
    //Find cluster center to which the pattern is closest
    Clustid = FindClosestCluster(pat);
    printf("patern %d assigned to cluster %d\n\n", pat, Clustid);
    //post this pattern to the cluster
    MemberIndex = Cluster[Clustid].NumMembers;
    Cluster[Clustid].Member[MemberIndex] = pat;
    Cluster[Clustid].NumMembers++;
  }
 // endfor //
}

int System::CalcNewClustCenters()
{
  int ConvFlag, VectID, i, j, k;
  double tmp[MAXVECTDIM];
  char xs[255];  
  char szBuf[255];
  ConvFlag = TRUE;
  printf("The new cluster centers are now calculated as:\n");
  //for each cluster
  for (i = 0; i < NumClusters; i++)
  {      
     strcpy(xs,"");
	 printf("Cluster Center %d (1/%d):\n",i,Cluster[i].NumMembers);	
	// clear workspace
    for (j = 0; j < SizeVector; j++)
    { 
      tmp[j] = 0.0;
    }// endfor
   
	//traverse member vectors
    for (j = 0; j < Cluster[i].NumMembers; j++)
    { 
      VectID = Cluster[i].Member[j];
	  //traverse elements of vector
      for (k = 0; k < SizeVector; k++)
      { 
        tmp[k] += Pattern[VectID][k]; // add (member) pattern elmnt into temp  
		sprintf(szBuf,"%d ",Pattern[VectID][k]);
        //strcat(xs, f2a(Pattern[VectID][k], 3));    
		strcat(xs,szBuf);
      }  
	  printf("%s\n",xs);
	  strcpy(xs,"");	  
    }// endfor // 
	 
	//traverse elements of vector
    for (k = 0; k < SizeVector; k++)
    { 
	   if(Cluster[i].NumMembers!=0)
       tmp[k] = tmp[k] / Cluster[i].NumMembers;
      if (tmp[k] != Cluster[i].Center[k])
        ConvFlag = FALSE;
      Cluster[i].Center[k] = tmp[k];
    }
     
    printf("%s,\n", xs); 
  } 
  return ConvFlag;
}


void System::ShowClusters()
{
  int cl;
  for (cl = 0; cl < NumClusters; cl++)
  {
    printf("\nCLUSTER %d ==>[%f,%f]\n", cl, Cluster[cl].Center[0],
           Cluster[cl].Center[1]);
  }
  // endfor //
}
 

void System::SaveClusters(char * fname)
{
}
 
#include <windows.h>
void main(int argc, char * argv[])
{ 
	 
  System kmeans;
  if (argc < 2)
  {
    printf("USAGE: KMEANS PATTERN_FILE\n");
    exit(0);
  }
  if (kmeans.LoadPatterns(argv[1]) == FAILURE)
  {
    printf("UNABLE TO READ PATTERN_FILE:%s\n", argv[1]);
    exit(0);
  }

  kmeans.InitClusters();
  kmeans.RunKMeans();
  kmeans.ShowClusters();
  kmeans.ShowCenters(); 
   
  return ;
} 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品va天堂亚洲国产| 国产成人精品免费一区二区| 亚洲视频一二三区| 国产日韩成人精品| 亚洲国产精品激情在线观看| 久久夜色精品一区| 久久久99精品久久| 久久这里都是精品| 久久九九国产精品| 国产精品天天摸av网| 亚洲欧洲色图综合| 亚洲精品久久嫩草网站秘色| 亚洲精品综合在线| 亚洲图片欧美综合| 青青草原综合久久大伊人精品优势| 日韩激情视频在线观看| 日本伊人午夜精品| 国产99久久久久久免费看农村| 国产一区二区免费视频| 成人午夜大片免费观看| 一本色道a无线码一区v| 欧美美女黄视频| 日韩亚洲欧美在线观看| 国产亚洲精品bt天堂精选| 亚洲日本成人在线观看| 亚洲一区在线电影| 久久精品国产色蜜蜜麻豆| 国产91色综合久久免费分享| 91丝袜美腿高跟国产极品老师 | 欧美日韩国产综合草草| 日韩一区二区三区三四区视频在线观看 | 1024国产精品| 一区二区成人在线| 国内精品在线播放| 色悠悠久久综合| 日韩欧美国产三级电影视频| 亚洲欧洲韩国日本视频| 日本va欧美va精品| 不卡在线观看av| 欧美浪妇xxxx高跟鞋交| 日本一区二区电影| 亚洲成人免费电影| 成人蜜臀av电影| 日韩欧美视频在线| 国产精品久久久久天堂| 日本系列欧美系列| 91蜜桃视频在线| 26uuu亚洲| 青青草精品视频| 91久久精品一区二区| www国产成人免费观看视频 深夜成人网| 国产精品国产自产拍高清av王其| 一区二区三区电影在线播| 久久不见久久见免费视频1| 色婷婷综合久久久久中文一区二区| 日韩欧美二区三区| 亚洲成人免费电影| 色综合久久88色综合天天免费| 久久久久高清精品| 狠狠久久亚洲欧美| 欧美精品 国产精品| 亚洲美女电影在线| 成人av综合一区| 久久久国际精品| 国产在线国偷精品免费看| 欧美久久久久中文字幕| 亚洲精品乱码久久久久久久久| 精品一区二区三区免费毛片爱| 欧美日韩亚洲综合在线 欧美亚洲特黄一级| 久久精品视频网| 国产一本一道久久香蕉| 日韩限制级电影在线观看| 日本中文字幕一区二区视频 | 亚洲国产成人在线| 国产一本一道久久香蕉| 精品国产凹凸成av人网站| 全国精品久久少妇| 欧美不卡一区二区| 精品一区二区在线播放| 日韩欧美国产午夜精品| 美女视频黄 久久| 精品成人一区二区| 精品中文av资源站在线观看| 久久久噜噜噜久久人人看| 国产精品99久久久久久久女警 | 亚洲免费在线看| 在线视频综合导航| 亚洲国产精品一区二区www| 欧美三级韩国三级日本三斤| 五月婷婷久久综合| 精品国产乱码久久久久久夜甘婷婷 | 精品国产一区二区精华| 精品一二线国产| 欧美tickle裸体挠脚心vk| 精品一区二区三区免费播放| 久久日一线二线三线suv| 成人国产在线观看| 亚洲资源在线观看| 日韩久久久久久| 国产成人免费视频一区| 国产一区二区影院| 国产福利精品导航| 欧美日本不卡视频| 亚洲香肠在线观看| 天天av天天翘天天综合网色鬼国产| 欧美亚洲免费在线一区| 美日韩一级片在线观看| 国产欧美综合在线观看第十页 | 国产午夜久久久久| gogogo免费视频观看亚洲一| 亚洲日本va午夜在线电影| 欧美日韩二区三区| 成人一级视频在线观看| 亚洲国产日韩精品| 国产欧美一区二区三区网站| 在线观看亚洲一区| 国产在线麻豆精品观看| 一区二区三区中文字幕| 欧美精品久久久久久久多人混战 | 老司机精品视频一区二区三区| 国产三级精品三级在线专区| 在线精品视频一区二区| 精品综合久久久久久8888| 国产精品国产馆在线真实露脸| 91精品国产91久久久久久最新毛片 | 国产麻豆精品视频| 亚洲小少妇裸体bbw| 中文字幕av一区二区三区高| 欧美系列一区二区| 成人av先锋影音| 国内精品伊人久久久久av影院| 一区二区三区日本| 国产精品无圣光一区二区| 日韩欧美久久久| 欧美偷拍一区二区| 色综合网色综合| 成人午夜又粗又硬又大| 久久99国内精品| 五月激情综合网| 亚洲精品第一国产综合野| 国产精品美女久久久久久久久| 欧美一区二区三区免费观看视频| 色婷婷精品大视频在线蜜桃视频 | 波多野结衣在线aⅴ中文字幕不卡| 日欧美一区二区| 亚洲丶国产丶欧美一区二区三区| 亚洲色图第一区| 中文字幕在线免费不卡| 中文字幕免费不卡| 国产日产欧美一区二区三区| 欧美精品一区二区三区蜜桃| 精品久久久久久最新网址| 在线综合视频播放| 91精品国产综合久久久久久漫画| 日本二三区不卡| 欧美亚洲日本国产| 欧美日韩国产美| 欧美日韩激情一区二区三区| 欧美日本在线播放| 欧美一区二区观看视频| 91精品福利在线一区二区三区 | 欧美极品美女视频| 久久久久久久电影| 欧美国产精品v| 国产精品久久午夜夜伦鲁鲁| 国产精品麻豆欧美日韩ww| 国产精品毛片久久久久久| 国产精品久久久久久久久晋中 | 在线观看91精品国产入口| 欧美四级电影在线观看| 欧美高清www午色夜在线视频| 日韩一区二区在线播放| 国产亚洲欧美在线| 综合网在线视频| 午夜精品久久久久久久 | 国产精品网站一区| 亚洲美女区一区| 午夜日韩在线电影| 久久成人综合网| av在线不卡网| 欧美日韩国产综合一区二区三区 | 久久久久久久久久久久久女国产乱 | 五月综合激情日本mⅴ| 免费观看日韩电影| 成人一区二区三区| 欧美日韩在线精品一区二区三区激情| 色8久久精品久久久久久蜜 | 国产亚洲欧美一区在线观看| 中文字幕一区视频| 偷窥少妇高潮呻吟av久久免费| 久久精品久久精品| 91视视频在线观看入口直接观看www | 国产一区二区在线免费观看| 国产99精品视频| 在线不卡中文字幕| 国产精品麻豆欧美日韩ww| 日本不卡的三区四区五区| 成人午夜激情影院| 欧美一区二区视频在线观看2020 | 欧美不卡一区二区三区四区|