리스트의 표준 편차
여러 (Z) 목록의 첫 번째, 두 번째, ... 자리의 평균 및 표준 편차를 찾고 싶습니다.예를 들어, 나는.
A_rank=[0.8,0.4,1.2,3.7,2.6,5.8]
B_rank=[0.1,2.8,3.7,2.6,5,3.4]
C_Rank=[1.2,3.4,0.5,0.1,2.5,6.1]
# etc (up to Z_rank )...
이제 저는 평균과 표준을 측정하고 싶습니다.*_Rank[0]
의 평균과 표준*_Rank[1]
,기타.
(즉, 모든 (A)에서 첫 번째 자리의 평균과 표준._순위 목록;
모든 (A..)에서 두 번째 자리의 평균과 표준._순위 목록;
세 번째 자리의 평균과 표준...등).
Python 3.4 / PEP450 이후 표준 라이브러리에 다음과 같은 반복 가능한 표준 편차를 계산하는 방법이 있습니다.
>>> A_rank = [0.8, 0.4, 1.2, 3.7, 2.6, 5.8]
>>> import statistics
>>> statistics.stdev(A_rank)
2.0634114147853952
나는 말입니다.A_Rank
2D NumPy 배열에 등을 추가한 다음 및 를 사용하여 평균과 표준 편차를 계산합니다.
In [17]: import numpy
In [18]: arr = numpy.array([A_rank, B_rank, C_rank])
In [20]: numpy.mean(arr, axis=0)
Out[20]:
array([ 0.7 , 2.2 , 1.8 , 2.13333333, 3.36666667,
5.1 ])
In [21]: numpy.std(arr, axis=0)
Out[21]:
array([ 0.45460606, 1.29614814, 1.37355985, 1.50628314, 1.15566239,
1.2083046 ])
여기 평균과 표준 편차를 계산하는 데 사용할 수 있는 몇 가지 순수 파이썬 코드가 있습니다.
아래의 모든 코드는 Python 3.4+의 모듈을 기반으로 합니다.
def mean(data):
"""Return the sample arithmetic mean of data."""
n = len(data)
if n < 1:
raise ValueError('mean requires at least one data point')
return sum(data)/n # in Python 2 use sum(data)/float(n)
def _ss(data):
"""Return sum of square deviations of sequence data."""
c = mean(data)
ss = sum((x-c)**2 for x in data)
return ss
def stddev(data, ddof=0):
"""Calculates the population standard deviation
by default; specify ddof=1 to compute the sample
standard deviation."""
n = len(data)
if n < 2:
raise ValueError('variance requires at least two data points')
ss = _ss(data)
pvar = ss/(n-ddof)
return pvar**0.5
참고: summing floats에서 정확도를 향상시키기 위해,statistics
모듈이 사용자 지정 기능을 사용합니다._sum
붙박이라기보다는sum
그 자리에서 사용해 본 적이 있습니다.
예를 들어 다음과 같습니다.
>>> mean([1, 2, 3])
2.0
>>> stddev([1, 2, 3]) # population standard deviation
0.816496580927726
>>> stddev([1, 2, 3], ddof=1) # sample standard deviation
0.1
Python 2.7.1에서는 다음을 사용하여 표준 편차를 계산할 수 있습니다.numpy.std()
대상:
- 모집단 std: 그냥 사용
numpy.std()
데이터 목록 외에 추가 인수가 없습니다. - 표본 표준:다음 예와 같이 ddof(즉, 델타 자유도)를 1로 설정해야 합니다.
numpy.std(< your-list >, ddof=1)
계산에 사용되는 지수는 N - ddof이며, 여기서 N은 원소의 수를 나타냅니다.기본적으로 ddof는 0입니다.
모집단 표준이 아닌 표본 표준을 계산합니다.
파이썬을 사용하는 몇 가지 방법은 다음과 같습니다.
import statistics as st
n = int(input())
data = list(map(int, input().split()))
접근법 1 - 함수 사용
stdev = st.pstdev(data)
접근법 2: 분산을 계산하고 제곱근을 구합니다.
variance = st.pvariance(data)
devia = math.sqrt(variance)
접근법 3: 기본 수학 사용
mean = sum(data)/n
variance = sum([((x - mean) ** 2) for x in X]) / n
stddev = variance ** 0.5
print("{0:0.1f}".format(stddev))
참고:
variance
표본 모집단의 분산을 계산합니다.pvariance
전체 모집단의 분산을 계산합니다.- 사이의 유사한 차이점
stdev
그리고.pstdev
python 2.7에서는 모집단 표준 편차를 제공하는 NumPy를 사용할 수 있습니다.
Python 3.4에서는 표본 표준 편차를 반환합니다.그pstdv()
기능은 다음과 같습니다.numpy.std()
.
순수 파이썬 코드:
from math import sqrt
def stddev(lst):
mean = float(sum(lst)) / len(lst)
return sqrt(float(reduce(lambda x, y: x + y, map(lambda x: (x - mean) ** 2, lst))) / len(lst))
다른 답변은 파이썬에서 stddev를 어떻게 해야 하는지 충분히 다루지만, 아무도 당신이 설명한 이상한 횡단을 어떻게 하는지 설명하지 않습니다.
저는 A-Z가 전체 인구라고 가정할 것입니다.샘플에서 추론하는 방법에 대한 Ome의 답변을 볼 수 없습니다.
따라서 모든 목록의 첫 번째 자리의 표준 편차/평균을 얻으려면 다음과 같은 것이 필요합니다.
#standard deviation
numpy.std([A_rank[0], B_rank[0], C_rank[0], ..., Z_rank[0]])
#mean
numpy.mean([A_rank[0], B_rank[0], C_rank[0], ..., Z_rank[0]])
코드를 단축하고 n자리로 일반화하려면 내가 생성한 다음 함수를 사용합니다.
def getAllNthRanks(n):
return [A_rank[n], B_rank[n], C_rank[n], D_rank[n], E_rank[n], F_rank[n], G_rank[n], H_rank[n], I_rank[n], J_rank[n], K_rank[n], L_rank[n], M_rank[n], N_rank[n], O_rank[n], P_rank[n], Q_rank[n], R_rank[n], S_rank[n], T_rank[n], U_rank[n], V_rank[n], W_rank[n], X_rank[n], Y_rank[n], Z_rank[n]]
이제 다음과 같이 A-Z에서 모든 n번째 자리의 stdd와 평균을 얻을 수 있습니다.
#standard deviation
numpy.std(getAllNthRanks(n))
#mean
numpy.mean(getAllNthRanks(n))
언급URL : https://stackoverflow.com/questions/15389768/standard-deviation-of-a-list
'programing' 카테고리의 다른 글
git 원격 다른 SSH 포트와 함께 추가 (0) | 2023.05.25 |
---|---|
mongodb에서 중첩된 배열 업데이트 중 (0) | 2023.05.25 |
서비스 패브릭에 대한 환경별 런타임 구성 매개 변수를 설정하고 액세스하는 위치는 무엇입니까? (0) | 2023.05.25 |
통화에 어떤 데이터 유형을 사용해야 합니까? (0) | 2023.05.20 |
Eclipse IDE에서 창/뷰를 분할 및 분할 해제하는 방법은 무엇입니까? (0) | 2023.05.20 |