Tengamos un flujo continuo de números como x 1 ,x 2 ,x 3 ,…,x n .
La fórmula para calcular la media y la varianza en cualquier punto dado se da como:
- Media = E(x) = u = 1 / norte ∑ i =1 norte x yo
- Desviación estándar = s = 1 / n ∑ i=1 n (x i – u) 2
- Varianza = s 2
Sin embargo, sería un enfoque muy lento si calculamos estas expresiones recorriendo todos los números cada vez que aparece un nuevo número.
Solución efectiva
s2 = 1/n ∑i=1n (xi - u) 2 = 1/n (∑i=1n xi2 + ∑i=1n u2 - 2u ∑i=1n xi) = 1/n (∑xi2 + nu2 - 2u ∑xi) = ∑xi2/n + u2 - 2u ∑xi/n = ∑xi2/n - u2 = E(x2) - u2 = E(x2) - [E(x)]2
Por lo tanto, en esta implementación, tenemos que mantener una suma variable de todos los números actuales para la media y mantener la suma variable 2 de todos los números actuales para E(x 2 ) y tenemos que mantener otra variable n para el conteo de números presentes .
Código Python para la implementación:
Python3
sum=0 # To store sum of stream sumsq=0 # To store sum of square of stream n=0 # To store count of numbers while(True): x=int(input("Enter a number : ")) n+=1 sum+=x sumsq+=(x*x) #Mean mean = sum/n #Variance var = (sumsq/n) - (mean*mean) print("Mean : ",mean) print("Variance : ",var) print()
Input and corresponding output : Enter a number : 1 Mean : 1.0 Variance : 0.0 Enter a number : 2 Mean : 1.5 Variance : 0.25 Enter a number : 5 Mean : 2.6666666666666665 Variance : 2.8888888888888893 Enter a number : 4 Mean : 3.0 Variance : 2.5 Enter a number : 3 Mean : 3.0 Variance : 2.0
Por lo tanto, podemos calcular la media y la varianza de un flujo continuo en cualquier punto dado en un tiempo constante.