Итак, я создал эту функцию, которая может вычислять стандартное отклонение из списка данных для моего класса статистики:
from math import *
data = [35, 27, 24, 42, 25, 31, 41, 34, 32, 46, 29, 44, 29, 35, 39, 27, 41, 63, 52, 31, 38, 46, 39, 27, 58, 32, 33, 47, 36, 28, 65, 53, 40, 32, 39, 44, 48, 59, 46, 62, 22, 39, 35, 29, 36, 66, 33, 45, 50, 62, 27, 27, 41, 33, 54, 44, 26, 31, 45, 33, 42, 63, 51, 70, 42, 53, 38, 28, 35, 49, 47, 54, 44, 40, 39, 62, 30, 35, 38, 26, 34, 61, 19, 30, 34, 26, 41, 35, 26, 54, 28, 32, 50, 27, 31, 35, 38, 26, 47, 30, 28, 62, 57, 56, 30, 32, 31, 36, 32, 42, 33, 51, 35, 30, 28, 20, 23, 27, 33, 36, 35, 42, 43, 28, 36, 44, 58, 41, 36, 37, 49, 34, 23, 39, 34, 37, 62, 23, 28, 26, 29, 30, 37, 46, 43, 56, 53, 31, 36, 44, 39, 51, 21, 51, 34, 30, 25, 31, 38, 52, 49, 43, 50, 31, 36, 32, 28, 44, 61, 57, 24, 63, 28, 31, 32, 26, 28]
def stand_dev(list_n):
sum_num = 0
for x in list_n: # Calculate the mean of the list
sum_num += list_n[x]
sum_of_n = sum_num
mean = float(sum_of_n / len(list_n))
float(mean)
e = 0.0
for i in list_n: # Take the values from the list, subtract it by the computed mean, square the result, and then add them with e to compound the answer
subtract_then_square = (list_n[i] - mean)**2
e += subtract_then_square
result1 = e
new_mean = result1 / len(list_n) # Finding the mean again by using the new sum
final_result = float(sqrt(new_mean)) # square root mean
return final_result
print(stand_dev(data))
Код хорошо работает для больших данных, подобных приведенному выше, но почему-то не работает для меньших данных Пример: [1, 2, 3, 4], и компилятор на самом деле выводит ошибку, которая гласит: «Индекс вне диапазона". Кто-нибудь знает, почему это происходит или почему это не работает?
Код хорошо работает с большими данными -- на самом деле он вообще не работает. Это дает вам ответ, но ответ - мусор.
Почему бы не использовать
stdev
из модуля статистики?