Mathematics Stack Exchange is a question and answer site for people studying math at any level and professionals in related fields. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

is it possible to calculate the regular average of a sequence of numbers when i dont know everything of the sequence, but just everytime i get a new number i know the total count of numbers and the average for the numbers - 1.

for example: 2 3 10 the average is of course: 5

but in the last step to calculate i only have access to the previous average of 2 and 3: 2.5 the next number: 10 and the count of numbers: 3

if this is possible, how?

share|cite|improve this question
up vote 12 down vote accepted

Yes, and you can derive it from the expression for the average. Let the average of the first $n$ numbers be $\mu_n$. The formula for it is

$$\mu_n = \frac{1}{n} \sum_{i=1}^n x_i$$

Then you can derive

$$n \mu_n = \sum_{i=1}^nx_i = x_n + \sum_{i=1}^{n-1} x_i = x_n + (n-1)\mu_{n-1}$$

and hence, dividing by $n$,

$$\mu_n = \frac{(n-1) \mu_{n-1} + x_n}{n}$$

i.e. to calculate the new average after then $n$th number, you multiply the old average by $n-1$, add the new number, and divide the total by $n$.

In your example, you have the old average of 2.5 and the third number is 10. So you multiply 2.5 by 2 (to get 5), add 10 (to get 15) and divide by 3 (to get 5, which is the correct average).

Note that this is functionally equivalent to keeping a running sum of all the numbers you've seen so far, and dividing by $n$ to get the average whenever you want it (although, from an implementation point of view, it may be better to compute the average as you go using the formula I gave above. For example, if the running sum ever gets larger than $10^{308}$ish then it may be too large to represent as a standard floating point number, even though the average can be represented).

share|cite|improve this answer
    
Thanks alot man. You saved me alot of time :) – bksi Dec 8 '12 at 12:51
    
Thank you for this, found it with a search and was exactly what I needed. – Ashigore Feb 21 at 19:21
    
As you're computing the previous sum $(n-1)\mu_{n-1}$ as part of the formula, I think this wouldn't help is the sum gets too large. – danijar Jun 23 at 1:12
1  
@danijar Completely true - a better approach is to keep running sums of the $x_n$ using a method that is robust to rounding error (e.g. Kahan summation) and a separate running count of $n$, and divide whenever you need the mean. That way, your error is bounded by the accuracy of your floating point type. – Chris Taylor Jun 23 at 7:44
    
If you are likely to end up with numbers larger than $10^{308}$ then you either need to scale down your inputs, or use a more capacious floating point type. – Chris Taylor Jun 23 at 7:46

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.