2016-12-02 4 views
1

Мне нужно рассчитать среднее значение, дисперсию и std в python.как вычислить дисперсию и std без импорта

Вот мой код:

def mean(first_data_values): 

    return sum(first_data_values)/len(first_data_values) 

def variance(values): 

    meanval = mean(values) 
    return sum((values[i]-meanval) ** 2 for i in values)/len(values) 

def std(values): 

    return (variance(values)) ** (1/2) 

Так я получаю неправильный результат. Любая идея, что не так ???

+1

Есть ли какой-либо конкретной причине вы не можете использовать 'statistics' модуль? – farsil

+2

Вероятно, должно быть 'sum ((i - meanval) ** 2 для i в значениях)/len (значения)' –

+1

не разрешено для этой домашней работы –

ответ

1

Ошибка заключается в следующей строке:

return sum((values[i]-meanval) ** 2 for i in values)/len(values) 

i принимает значение каждого элемента в values один за другим. Затем вы используете его как индекс в values[i], но он должен быть только i.

Следовательно:

return sum((i-meanval) ** 2 for i in values)/len(values) 

или

return mean([(i-meanval) ** 2 for i in values]) 
+0

Или просто 'return mean ([(i-meanval) ** 2 для i в значениях])' –

+0

Да, еще лучше! – Zafi

+0

большое спасибо :) –

Смежные вопросы