나는 어떻게 계산하는 표준 편차는 파이썬에서 사용하지 않고 numpy?

0

질문

하는 표준 편차를 계산 하에서는 파이썬은 사용하지 않고 numpy 또는 외부 라이브러리를 제외한 math. 을 얻으려면 더 잘 쓰는 알고리즘과 그냥 이 일로"숙제"내가 내 python 능력입니다. 나의 목표는 번역 이 수식 으로 python 지 못하고 올바른 결과입니다.

나의 배열을 사용하여 속도 speeds = [86,87,88,86,87,85,86]

을 실행할 때:

std_dev = numpy.std(speeds)
print(std_dev)

을 얻을:0.903507902905. 그러나 나는 원하지 않에 의존하 numpy. 그래서...

내 구현은 다음과 같습니다:

import math

speeds = [86,87,88,86,87,85,86]

def get_mean(array):
    sum = 0
    for i in array:
        sum = sum + i
    mean = sum/len(array)
    return mean

def get_std_dev(array):
    # get mu
    mean = get_mean(array)
    # (x[i] - mu)**2
    for i in array:
        array = (i - mean) ** 2
        return array
    sum_sqr_diff = 0
    # get sigma
    for i in array:
        sum_sqr_diff = sum_sqr_diff + i
        return sum_sqr_diff
    # get mean of squared differences
    variance = 1/len(array)
    mean_sqr_diff = (variance * sum_sqr_diff)
    
    std_dev = math.sqrt(mean_sqr_diff)
    return std_dev

std_dev = get_std_dev(speeds)
print(std_dev)

지금 실행할 때:

std_dev = get_std_dev(speeds)
print(std_dev)

을 얻을: [0] 하지만 난 기대 0.903507902905

나는 무엇을 놓치까요?

algorithm mean python standard-deviation
2021-11-23 20:46:59
5

최고의 응답

1
speeds = [86,87,88,86,87,85,86]

# Calculate the mean of the values in your list
mean_speeds = sum(speeds) / len(speeds)

# Calculate the variance of the values in your list
# This is 1/N * sum((x - mean(X))^2)
var_speeds = sum((x - mean_speeds) ** 2 for x in speeds) / len(speeds)

# Take the square root of variance to get standard deviation
sd_speeds = var_speeds ** 0.5

>>> sd_speeds
0.9035079029052513
2021-11-23 21:10:27

을 실행할 때는 얻 1.0.
bkleeman

를 다시 시작하는 파이썬습니다. 무언가를 당신을 했는 나사 중 하나와 함께 기본 기능.
CJR

Oh,결코 마음,당신은 당신을 사용하여 python2.7,하지 않습니다 당신. 추가 from __future__ import division -표준 부문 / 하지 않은 진정한 부서지는 파이썬 3.0 지 않는 한 당신은에서 가져올 미래입니다.
CJR

예 내가 사용하고 2.7. 귀하의 솔루션은 미래에 분열 가져오는 지금 나를 위해 노력하고 있습니다. 매우 감사드립니다.
bkleeman

그 시간을 이동하 py3,짝입니다.
CJR

나는 새로운 데이터베이고 나는 아직 알 운율 또는 이유 때 내 컴퓨터에서 실행됩 py2 대 py3 정직합니다. 나는 그 밖으로 정렬됩니다.
bkleeman

많은 리눅스 배포판으로 배 py2.7py3-당신은 아마 python3(그러나 바이너리 python3python). 또한 고려할 수 있습 같은 것을 사용하는 아나콘다를 설정하는 환경입니다. py2.7 이 아니라 과거 end-of-life.
CJR
1

문제 코드에서는 재사용의 배열을 반환에서 중앙의 루프

def get_std_dev(array):
    # get mu
    mean = get_mean(array)       <-- this is 86.4
    # (x[i] - mu)**2
    for i in array:
        array = (i - mean) ** 2  <-- this is almost 0
        return array             <-- this is the value returned

지금 우리가 살펴 보자 알고리즘을 사용하고 있습니다. 참고는 두 가지가 있 std 편차는 수식은 일반적으로 사용됩니다. 다양한 인수하는 하나의 올바른 것입니다.

sqrt(sum((x - mean)^2) / n)

sqrt(sum((x - mean)^2) / (n -1))

에 대한 큰 값 n,첫 번째 수식가부터 사용 -1 하지 않습니다. 첫 번째 수식은 감소될 수 있습니다

sqrt(sum(x^2) /n - mean^2)

그래서 당신이 어떻게 이런 파이썬?

def std_dev1(array):
   n = len(array)
   mean = sum(array) / n
   sumsq = sum(v * v for v in array)
   return (sumsq / n - mean * mean) ** 0.5
2021-11-24 06:21:59
-1

몇 가지 문제 코드에서 하나 그들의 반환 값이 내부에 대한 문의입니다. 당신이 시도 할 수 있습니다

def get_mean(array):
    return sum(array) / len(array)


def get_std_dev(array):
    n = len(array)
    mean = get_mean(array)
    squares_arr = []
    for item in array:
        squares_arr.append((item - mean) ** 2)
    return math.sqrt(sum(squares_arr) / n)
2021-11-23 22:06:23
-2

다. 필요하신 제거 return 내부 루프가 있습니다.

def get_std_dev(array):
    # get mu
    mean = get_mean(array)
    sum_sqr_diff = 0
    # get sigma
    for i in array:
        sum_sqr_diff = sum_sqr_diff + (i - mean)**2
    # get mean of squared differences
    variance = 1/len(array)
    mean_sqr_diff = (variance * sum_sqr_diff)
    
    std_dev = math.sqrt(mean_sqr_diff)
    return std_dev
2021-11-23 20:59:12
-2

원하지 않는 경우에 사용하기 numpy 확인해 보시 statistics 패키지에서는 파이썬

import statistics

st_dev = statistics.pstdev(speeds)
print(st_dev)

는 경우 또는 당신을 확인하는 방법에 대해 설명합니다 사용자 지정 솔루션을 사용하여 다음은 당신을 사용하여 다음과 같은 방법을 사용하여 목록을 이해 당신의 복잡한 버 접근법

import math

mean = sum(speeds) / len(speeds)
var = sum((l-mean)**2 for l in speeds) / len(speeds)
st_dev = math.sqrt(var)
print(st_dev)
2021-11-23 20:58:42

다른 언어로

이 페이지는 다른 언어로되어 있습니다

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................