Я определяю функцию, которая вычисляет стандартное отклонение списка. Иногда среднее значение этого списка отрицательное, поэтому моя функция не может принимать квадратный корень отрицательного значения, возвращая мне ошибку.
Это кажется простым, я просто не могу думать об этом. Я хочу написать условие для моей функции, говоря, что если есть отрицательное число, умножить на -1, так как квадратный корень отрицательного числа не может быть принят.
Как я могу написать это выражение?
def stdevValue(lst):
"""calculates the standard deviation of a list of numbers
input: list of numbers
output: float that is the standard deviation
"""
stdev = 0
stdevCalc = (((sum(lst) - (meanValue(x)))/(len(lst)-1)))**0.5
stdev += stdevCalc
return stdev
Похоже, вы неправильно использовали формулу для стандартного отклонения. Вам не нужно вообще обрабатывать случай квадратного корня из отрицательных чисел. Перед суммированием необходимо разделить каждую разницу между значением и средним значением, например:
def stdevValue(lst):
m = meanValue(x) # wherever this comes from
return (sum((x - m) ** 2 for x in lst) / len(lst)) ** 0.5
Это гарантирует, что сумма неотрицательна, поэтому вы можете взять квадратный корень, не беспокоясь о отрицательных значениях. (Если вы хотите стандартное отклонение образца, разделите на (len(lst) - 1)
).
Более подробную информацию и примеры см. в статье Wikipedia по Стандартное отклонение.
Игнорируя контекст вопроса, ответ заключается в использовании встроенного abs
. Но если у вас есть математическое выражение типа y = sqrt(x)
, а y
не может быть сложным, то x
не может быть отрицательным. Любой отрицательный x
обозначает проблему, которая может быть округлением, обертыванием или, как в вашем случае, неправильной формулой. Простое умножение на -1 или принятие abs
не устранит проблему, это даст вам неправильный ответ. Возможно, вам стоит подумать над тем, как бороться с этими случаями (хотя я понимаю, что в случае стандартного отклонения эти ошибки вряд ли возникнут).
Если вы хотите действительно стать творческим, вы можете использовать квадратный и квадратный корень:
>>> import math
>>> x = -5
>>> math.sqrt((-5)**2)
5.0
Приветствия
abs
...