2011-05-09 4 views
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) 음수이면 – MichaelHouse

답변

-1

당신이 정말로 창조적 얻고 싶은 경우에, 당신은 사각형 수 제곱근 :

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

건배

당신은 표준 편차에 대한 공식을 잘못 적용 것으로 보인다
+3

하나님은 'abs' 함수를 사용하지 마십시오 ... – luqui

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)으로 나눕니다).

자세한 내용과 예제는 Standard Deviation에 대한 위키 백과 문서를 참조하십시오.

+1

큰 데이터 세트의 경우이 알고리즘은 반올림 오류로 인해 정밀 문제가 발생할 수 있습니다. 수치 적으로 안정적인 알고리즘에 대해서는 https://secure.wikimedia.org/wikipedia/en/wiki/Algorithms_for_calculating_variance를 참조하십시오. – btilly

2

질문의 맥락을 무시하면 대답은 내장 된 abs을 사용하는 것입니다. 하지만 숫자가 y = sqrt(x)이고 y 인 수학 표현식이 복잡하지 않은 경우 x은 음수 일 수 없습니다. 음수 인 x은 문제를 나타냅니다. 반올림, 줄 바꿈 또는 잘못된 수식이있을 수 있습니다. 단순히 -1을 곱하거나 abs을 복용해도 문제가 해결되지 않으면 잘못된 답을 줄 수 있습니다. 이러한 경우를 다루는 방법을 고려해야합니다 (표준 편차의 경우 이러한 오류가 발생하지 않을 것이라고 생각하지만).