Условно для отрицательного целого числа

1

Я определяю функцию, которая вычисляет стандартное отклонение списка. Иногда среднее значение этого списка отрицательное, поэтому моя функция не может принимать квадратный корень отрицательного значения, возвращая мне ошибку.

Это кажется простым, я просто не могу думать об этом. Я хочу написать условие для моей функции, говоря, что если есть отрицательное число, умножить на -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
  • 0
    если (число <0) это отрицательно
Теги:
conditional
math
bioinformatics

3 ответа

16

Похоже, вы неправильно использовали формулу для стандартного отклонения. Вам не нужно вообще обрабатывать случай квадратного корня из отрицательных чисел. Перед суммированием необходимо разделить каждую разницу между значением и средним значением, например:

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 по Стандартное отклонение.

  • 1
    Обратите внимание, что для больших наборов данных этот алгоритм может страдать от проблем точности из-за ошибок округления. См. Secure.wikimedia.org/wikipedia/en/wiki/… для более численно устойчивых алгоритмов.
2

Игнорируя контекст вопроса, ответ заключается в использовании встроенного abs. Но если у вас есть математическое выражение типа y = sqrt(x), а y не может быть сложным, то x не может быть отрицательным. Любой отрицательный x обозначает проблему, которая может быть округлением, обертыванием или, как в вашем случае, неправильной формулой. Простое умножение на -1 или принятие abs не устранит проблему, это даст вам неправильный ответ. Возможно, вам стоит подумать над тем, как бороться с этими случаями (хотя я понимаю, что в случае стандартного отклонения эти ошибки вряд ли возникнут).

-1

Если вы хотите действительно стать творческим, вы можете использовать квадратный и квадратный корень:

>>> import math
>>> x = -5
>>> math.sqrt((-5)**2)
5.0

Приветствия

  • 4
    Дай бог тебе использовать функцию abs ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню