2013-09-10 53 views
0

的心如果我有一些随机的数据集,让我们说查找数据集

X  Y 
1.2  16 
5.7  0.256 
128.54 6.879 
0  2.87 
6.78 0 
2.98 3.7 
...  ... 
x'  y' 

我如何才能找到这个数据集的质心坐标?

p.s.这里是我的尝试,但得到错误的结果

float Dim1[K]; 
float Dim2[K]; 
float centroidD1[K]; 
float centroidD2[K]; 

int K = 4; 
int counter[K]; 
for(int i = 0; i < K ; i++) 
{ 
    Dim1[i] = 0; 
    Dim2[i] = 0; 
    counter[i] = 0; 
    for(int j = 0; j < hash["Cluster"].size(); j++) 
    { 
     if(hash["Cluster"].value(j) == i+1) 
     { 
      Dim1[i] += hash["Dim_1"].value(j); 
      Dim2[i] += hash["Dim_2"].value(j); 
      counter[i]++; 
     } 
    } 
} 

for(int l = 0; l < K; l++) 
{ 
    centroidD1[l] = Dim1[l]/counter[l]; 
    centroidD2[l] = Dim2[l]/counter[l]; 
} 

我猜我选错算法做它,因为我得到错误的结果。

+1

添加所有数字并除以元素数量? –

+0

@Kerrek SB请参阅更新后的文章 – Mike

+0

您的程序输出了什么以及期望的结果是什么? – Renan

回答

0

如果你有一个大的数据集,计算总和除以N不是一个好主意。随着浮点累加器的增加,由于幅度的差异,添加新的点最终会停止工作。增量公式可能更好,请参阅:https://math.stackexchange.com/questions/106700/incremental-averageing

如果问题太大,可以通过使用带有手验证结果的较小数据集来验证代码的基本功能。例如,只有1个数据点或10个数据点。