Snažím se vypočítat směrodatnou odchylku v pythonu bez použití numpy
nebo nějaké externí knihovny výjimkou math
. Chci se dostat lepší na psaní algoritmů a jsem jen dělat to jako "domácí úkol", jak jsem zlepšit své python dovednosti. Mým cílem je přeložit tento vzorec do pythonu, ale nejsem dostat správný výsledek.
Jsem pomocí pole rychlostí, kde speeds = [86,87,88,86,87,85,86]
Když jsem spustit:
std_dev = numpy.std(speeds)
print(std_dev)
Chápu: 0.903507902905. Ale nechci se spoléhat na numpy. Takže...
V mé implementaci je následující:
import math
speeds = [86,87,88,86,87,85,86]
def get_mean(array):
sum = 0
for i in array:
sum = sum + i
mean = sum/len(array)
return mean
def get_std_dev(array):
# get mu
mean = get_mean(array)
# (x[i] - mu)**2
for i in array:
array = (i - mean) ** 2
return array
sum_sqr_diff = 0
# get sigma
for i in array:
sum_sqr_diff = sum_sqr_diff + i
return sum_sqr_diff
# get mean of squared differences
variance = 1/len(array)
mean_sqr_diff = (variance * sum_sqr_diff)
std_dev = math.sqrt(mean_sqr_diff)
return std_dev
std_dev = get_std_dev(speeds)
print(std_dev)
Teď, když jsem spustit:
std_dev = get_std_dev(speeds)
print(std_dev)
Jsem se: [0]
ale já jsem očekával 0.903507902905
Co mi tu chybí?
1.0
.