以下公式允許您根據您的要求僅根據存儲的平均值和計數來跟蹤平均值。
currentScore = (currentScore * currentCount + newValue)/(currentCount + 1)
currentCount = currentCount + 1
這取決於您的平均值是您的總和除以計數的事實。所以你只需乘以平均數來得到總和,加上你的新值併除以(count + 1),然後增加count。
因此,假設您有數據{7,9,11,1,12}
,唯一保留的是平均值和數量。隨着每個數字的增加,您將得到:
+--------+-------+----------------------+----------------------+
| Number | Count | Actual average | Calculated average |
+--------+-------+----------------------+----------------------+
| 7 | 1 | (7)/1 = 7 | (0 * 0 + 7)/1 = 7 |
| 9 | 2 | (7+9)/2 = 8 | (7 * 1 + 9)/2 = 8 |
| 11 | 3 | (7+9+11)/3 = 9 | (8 * 2 + 11)/3 = 9 |
| 1 | 4 | (7+9+11+1)/4 = 7 | (9 * 3 + 1)/4 = 7 |
| 12 | 5 | (7+9+11+1+12)/5 = 8 | (7 * 4 + 12)/5 = 8 |
+--------+-------+----------------------+----------------------+
這是對維護總和,特別是如果你可以推遲平均直到你總結出所有的數字好點。 – paxdiablo 2008-12-04 12:22:43
但我們不應該把它變成一個相互欽佩的社會:-) – paxdiablo 2008-12-04 12:23:15
沒錯;一般來說,你可以用權力總和來計算第n個時刻。例如,你可以計算std.dev。與正方形,總數和數量相加。但是,如果您需要流式標準。開發。不要這樣做,這樣做:http://www.cs.berkeley.edu/~mhoemmen/cs194-fall2007/Tutorials/variance.pdf – 2008-12-04 12:26:07