Найти центр тяжести набора данных

Если у меня есть некоторые случайные данные, скажем

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'

Как я могу найти координаты центроида этого набора данных?

постскриптум Вот что я пробовал, но получил неправильные результаты

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];
}

Я думаю, я выбрал неправильный алгоритм для этого, так как я получаю неправильные результаты.

0

Решение

Вычисление суммы и деление на N не очень хорошая идея, если у вас большой набор данных. По мере роста вашего накопителя с плавающей запятой добавление новой точки со временем перестанет работать из-за разницы величин. Инкрементная формула может работать лучше, см .: https://math.stackexchange.com/questions/106700/incremental-averageing

Если проблема слишком велика для набора данных, вы можете проверить основные функции своего кода, используя меньший набор данных с проверенным вручную результатом. Например, только 1 точка данных или 10 точек данных.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]