Notice
Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 배당
- 힐스테이트 광교산
- SK텔레콤
- 빅데이터분석기사
- ConnectedHomeIP
- esp32
- cluster
- 애플
- 라즈베리파이
- RS-485
- Python
- MQTT
- Bestin
- 미국주식
- homebridge
- matter
- 홈네트워크
- 주식
- 해외주식
- Apple
- 공모주
- 매터
- 나스닥
- 국내주식
- 파이썬
- 월패드
- raspberry pi
- Espressif
- 현대통신
- Home Assistant
Archives
- Today
- Total
YOGYUI
알고리즘 - 평균 구하기 본문
반응형
(Latex 연습용 포스트)
수치형 데이터 \(N\)개의 평균(average)을 구하는 공식은 다음과 같다
\(avg_{N}={\sum_{i=1}^{N}{a_{i}} \over N}\)
이 때, 위 수식은 다음과 같이 분해할 수 있다
\(\begin{align*} avg_{N}&={a_{1}+a_{2}+a_{3}+ \cdots +a_{N-2}+a_{N-1}+a_{N} \over N} \\&= {a_{1}+a_{2}+\cdots +a_{N-2}+a_{N-1}\over N}+{a_{N} \over N} \\&= {a_{1}+a_{2}+\cdots +a_{N-2}+a_{N-1} \over N-1} \times {N -1 \over N} + {a_{N} \over N} \\&= avg_{N-1} \times {N-1 \over N} + {a_{N} \over N} \\& = {avg_{N-1} \times (N-1) + a_{N} \over N}\end{align*}\)
즉, 이전까지의 평균(\(avg_{N-1}\))과 현재값(\(a_{N}\)), 그리고 전체 데이터 개수(\(N\))로 현재 평균(\(avg_{N}\))을 구할 수 있다
파이썬으로 테스트 코드를 작성해보자
1. 데이터 파일 생성
테스트를 위해 100만줄의 텍스트파일을 만들어보자 (1 ~ 1000000까지 숫자 기입)
with open('./data.txt', 'w') as fp:
for i in range(1000000):
fp.write(f'{i+1}\n')
2. 모두 합한 후 나누기
average, cnt = 0, 0
with open('./data.txt', 'r') as fp:
while True:
try:
average += int(fp.readline())
cnt += 1
except ValueError:
break
average = average / cnt
3. 순차적으로 구하기
average, cnt = 0, 0
with open('./data.txt', 'r') as fp:
while True:
try:
value = int(fp.readline())
cnt += 1
average = (average * (cnt - 1) + value) / cnt
except ValueError:
break
함수로 만들어보면 다음과 같다
def func_average(pre, value, count):
return (pre * (count - 1) + value) / count
average, cnt = 0, 0
with open('./data.txt', 'r') as fp:
while True:
try:
value = int(fp.readline())
cnt += 1
average = func_average(average, value, cnt)
except ValueError:
break
4. Numpy 배열 사용하기
import numpy as np
with open('./data.txt', 'r') as fp:
lines = fp.readlines()
array = np.asarray([int(x) for x in lines])
average = array.mean()
어떤 것을 사용하던 결과는 500000.5로 동일하다
반응형
'Software > Etc' 카테고리의 다른 글
Linux - USB Device 접근권한 영구변경 (chmod permanently) (0) | 2022.04.04 |
---|---|
Windows Batch Script::배치 파일의 경로 얻기 (0) | 2021.11.12 |
Tistory::notify-Notice_Blog_New 유입링크 해석하기 (2) | 2021.10.29 |
PyCharm - Run with Python Console 동일 콘솔에서 실행하기 (0) | 2021.09.24 |
Visual Studio Code (VSCode) unins000.exe 액세스 거부 오류 해결 (0) | 2021.08.19 |