반응형
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
| 31 |
Tags
- gas
- list
- Github
- Tkinter
- PySpark
- Google Excel
- PANDAS
- Excel
- GIT
- math
- numpy
- django
- Java
- SQL
- c#
- Apache
- Redshift
- hive
- string
- Mac
- PostgreSQL
- Kotlin
- Python
- 파이썬
- dataframe
- google apps script
- Google Spreadsheet
- array
- matplotlib
Archives
- Today
- Total
달나라 노트
Python numpy : sum, mean 본문
728x90
반응형
NumPy sum() / mean() — 합계와 평균을 axis 방향으로 계산하는 메서드
배열 전체 또는 특정 축(axis) 방향으로 합계와 평균을 구합니다. axis 개념만 이해하면 행/열 단위 집계가 자유로워집니다.
axis 개념 이해
NumPy 연산의 핵심은 axis입니다. axis=0은 행을 따라 아래 방향(↓)으로, axis=1은 열을 따라 가로 방향(→)으로 연산합니다.
2D array:
col0 col1 col2
row0 [[ 1, 2, 3 ],
row1 [ 4, 5, 6 ],
row2 [ 7, 8, 9 ]]
axis=0 → 행 방향(↓): 각 열을 따라 내려가며 연산 → 결과는 열마다 1개
axis=1 → 열 방향(→): 각 행을 따라 가로로 연산 → 결과는 행마다 1개
기본 문법
numpy.sum(a, axis=None, keepdims=False)
numpy.mean(a, axis=None, keepdims=False)
np.sum() 작동 방식
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
np.sum(a) # 45 ← 전체 합계
np.sum(a, axis=0) # array([12, 15, 18]) ← 열별 합계 (1+4+7, 2+5+8, 3+6+9)
np.sum(a, axis=1) # array([ 6, 15, 24]) ← 행별 합계 (1+2+3, 4+5+6, 7+8+9)
np.mean() 작동 방식
np.mean(a) # 5.0 ← 전체 평균
np.mean(a, axis=0) # array([4., 5., 6.]) ← 열별 평균
np.mean(a, axis=1) # array([2., 5., 8.]) ← 행별 평균
주의:
mean()은 항상 float을 반환합니다. sum()은 입력 배열의 dtype을 그대로 따릅니다.
keepdims 옵션 — shape 유지
연산 후에도 원본과 같은 차원 수를 유지합니다. 브로드캐스팅과 함께 쓸 때 유용합니다.
np.sum(a, axis=1)
# array([ 6, 15, 24]) ← shape (3,) 1차원으로 축소됨
np.sum(a, axis=1, keepdims=True)
# array([[ 6], ← shape (3, 1) 2차원 유지
# [15],
# [24]])
응용 사례 1 — 학생 성적 처리
# shape: (학생수, 과목수)
scores = np.array([[85, 90, 78],
[70, 65, 88],
[92, 88, 95]])
student_avg = np.mean(scores, axis=1) # 학생별 평균 → [84.3, 74.3, 91.7]
subject_avg = np.mean(scores, axis=0) # 과목별 평균 → [82.3, 81.0, 87.0]
total = np.sum(scores) # 전체 합계 → 751
응용 사례 2 — 이미지 흑백 변환
# RGB 이미지: shape (H, W, 3)
img_rgb = np.random.randint(0, 256, (100, 100, 3))
gray = np.mean(img_rgb, axis=2) # R, G, B 평균 → shape (100, 100)
응용 사례 3 — 정규화 (Mean Centering)
각 feature(열)의 평균을 빼서 데이터를 중앙 정렬합니다. 이때 keepdims 없이도 브로드캐스팅이 자동 적용됩니다.
data = np.array([[10, 20, 30],
[40, 50, 60]])
col_mean = np.mean(data, axis=0) # [25., 35., 45.]
centered = data - col_mean # 브로드캐스팅 자동 적용
# array([[-15., -15., -15.],
# [ 15., 15., 15.]])
NaN 처리 — np.nansum() / np.nanmean()
기본 sum() / mean()은 NaN이 하나라도 있으면 결과가 NaN이 됩니다. nan 버전은 NaN을 무시하고 계산합니다.
data = np.array([1.0, 2.0, np.nan, 4.0])
np.sum(data) # nan ← NaN 전파
np.nansum(data) # 7.0 ← NaN 무시
np.mean(data) # nan ← NaN 전파
np.nanmean(data) # 2.33 ← NaN 무시 (1+2+4) / 3
핵심 요약
np.sum() |
np.mean() |
|
|---|---|---|
| 반환값 | 합계 | 평균 (항상 float) |
| axis 없음 | 전체 합산 | 전체 평균 |
| axis=0 | 열 방향 합산 (↓) | 열 방향 평균 (↓) |
| axis=1 | 행 방향 합산 (→) | 행 방향 평균 (→) |
| NaN 처리 | np.nansum() |
np.nanmean() |
핵심 직관:
axis는 "이 방향을 따라서 연산한다"는 뜻입니다. axis=0은 행을 따라 내려가며(→ 열별 결과), axis=1은 열을 따라 옆으로 가며(→ 행별 결과) 계산합니다.
728x90
반응형
'Python > Python numpy' 카테고리의 다른 글
| Python numpy : nan_to_num (0) | 2026.05.20 |
|---|---|
| Python Pandas : stack, unstack (pivot하기, pivot 풀기) (0) | 2026.05.20 |
| Python numpy : minimum() / maximum() — 두 array를 element-wise로 비교해 작은/큰 값을 선택하는 메서드 (0) | 2026.05.14 |
| Python numpy : where() — 조건에 따라 두 값 중 하나를 선택하는 메서드 (0) | 2026.05.14 |
| Python numpy : polyfit() — 점들의 패턴에 가장 잘 맞는 다항식 계수를 추정하는 메서드 (0) | 2026.05.14 |
Comments
