Предполагая, что Count
и Average
являются индексированными значениями, вы можете вычислить ваше совокупное среднее значение следующим образом:
TotalCount = Sum(Count)
TotalAverage = Sum(Average * (Count/TotalCount))
Если вы хотите вычислить значения за одну итерацию по вашим сериализованным данным, вы можете суммировать последовательные средневзвешенные значения таким образом, чтобы это выглядело как экспоненциальные средние.
TotalCount = 0
TotalAverage = 0
for each index in data-set of [Average, Count]
TotalCount = TotalCount + Count[index]
Weight = Count[index]/TotalCount
TotalAverage = TotalAverage * (1 - Weight)
+ Average[index] * Weight
Вы можете найти правильный подход, рассмотрев первые две пары.
Если была только первая пара:
TotalCount = Count[1]
TotalAverage = Average[1]
Но, если есть две пары:
TotalCount = Count[1] + Count[2]
TotalAverage = Average[1] * (Count[1]/TotalCount)
+ Average[2] * (Count[2]/TotalCount)
Если бы мы перебирали первую пару во вторую пару, то вычисление двух пар может выглядеть следующим образом:
TotalCount = TotalCount + Count[2]
TotalAverage = TotalAverage * (TotalCount - Count[2])/TotalCount
+ Average[2] * (Count[2]/TotalCount)
Если мы позволим Weight
представлять Count[2]/TotalCount
, вышеприведенное упрощается до:
TotalCount = TotalCount + Count[2]
Weight = Count[2]/TotalCount
TotalAverage = TotalAverage * (1 - Weight)
+ Average[2] * Weight
Поскольку TotalCount
и TotalAverage
корректны на каждом шаге, который принимает новую пару сериализованных данных, [2]
можно заменить итерационным индексом.