끄적이는 개발노트

260526_강의 정리(Scipy, 수치해석) 본문

Python

260526_강의 정리(Scipy, 수치해석)

크런키스틱 2026. 5. 27. 14:24
728x90

 

Scipy · 수치해석
Scipy와 수치해석 — 시각적 이해
  • 수학 문제를 컴퓨터로 풀 수 있게 만드는 기법 = 수치해석
  • numpy(자료구조) + scipy(알고리즘) 조합으로 과학 계산 구현
  • 미분·적분 / 최적화 / 선형대수 / 통계 / FFT / 보간 / 이미지처리 모듈 제공
🔢
1. 수치해석이란?
  • 수학적 문제를 컴퓨터가 처리할 수 있는 산술 연산으로 바꾸는 기법
  • 정확한 해석적 풀이 대신, 충분히 정확한 근삿값을 빠르게 계산
문제 정의
수학적 모델
수치해법
구현 (코드)
💡 새 개념 — 이 섹션에 등장하는 용어
테일러급수 Taylor Series
  • 어떤 복잡한 함수도 다항식의 합으로 근사 가능
  • 컴퓨터는 sin·cos·exp 같은 함수를 직접 계산 불가
  • 테일러급수로 근사 → 덧셈·곱셈만으로 계산
sin(x) ≈ x - x³/6 + x⁵/120 - … (컴퓨터 내부 계산 방식)
오일러 방법 Euler Method
  • 미분방정식을 수치적으로 푸는 가장 기본적인 방법
  • "현재 기울기 × 작은 시간 간격"으로 다음 값 예측
  • 물리 시뮬레이션·수치 적분의 기초
로켓 궤도 계산: 현재 속도로 0.001초 뒤 위치 예측 반복
해석적 풀이 vs 수치해법
  • 해석적 풀이 → 정확한 수식으로 답 도출 (항상 가능하지 않음)
  • 수치해법 → 근삿값을 반복 계산으로 도출 (거의 모든 문제에 적용 가능)
∫e^(-x²)dx → 해석적 풀이 불가 → 수치 적분으로 계산
numpy vs scipy
  • numpy → 다차원 배열 자료구조 + 기본 연산 (덧셈·행렬 곱 등)
  • scipy → numpy 위에서 동작하는 고급 과학 계산 알고리즘
  • 관계 : numpy = 재료 / scipy = 요리 도구
📦
2. Scipy 주요 모듈 한눈에 보기
미분 · 적분 differentials / Integration scipy.integrate
"함수가 얼마나 빠르게 변하는가(미분), 얼마만큼 쌓였는가(적분)"
  • 함수 → 평균변화율 → 순간변화율 → 도함수 (미분의 흐름)
  • 적분 = 함수 아래 넓이를 수치적으로 계산
  • 해석적으로 풀기 어려운 복잡한 적분도 수치 계산으로 근사 가능
💡 새 개념
도함수 Derivative
  • 함수의 순간 변화율 — 그래프의 기울기
  • 1차 미분 → 현재 얼마나 빠르게 변하는가
  • 2차 미분 → 변화 속도 자체가 빨라지는가
속도 = 위치의 1차 미분 / 가속도 = 위치의 2차 미분
수치 적분
  • 함수 아래 넓이를 아주 작은 직사각형으로 분할해 합산
  • 분할이 촘촘할수록 정확도 향상
  • 몬테카를로 샘플링 → 무작위 점을 뿌려 확률적으로 적분값 추정
확률 분포 넓이 계산, 물리량 누적 계산
optimization 최적화 scipy.optimize
"함수의 최솟값·최댓값을 찾거나, 방정식의 해를 구하는 것"
  • 방정식의 근(Roots) 탐색 — f(x) = 0이 되는 x 찾기
  • 지역 최솟값 탐색 — 주변보다 낮은 지점 (뉴톤법 등)
  • 전역 최솟값 탐색 — 전체에서 가장 낮은 지점 (brute 등)
  • 연립방정식의 해 계산 — 여러 방정식을 동시에 만족하는 값
  • 곡선 피팅 — curve_fit으로 데이터에 가장 잘 맞는 함수 파라미터 탐색
💡 새 개념
지역해 vs 전역해
  • 지역해(Local minimum) → 주변에서만 가장 낮은 지점
  • 전역해(Global minimum) → 전체 공간에서 가장 낮은 지점
  • 지역해에 빠지면 최적이 아닌 결과를 최적으로 착각
산에서 내려갈 때 옆 골짜기(지역해)에 갇히는 것
곡선 피팅 Curve Fitting
  • 데이터 분포에 가장 잘 맞는 함수 파라미터를 찾는 과정
  • 목적 함수 = 실제값과 예측값의 오차를 최소화
실험 데이터에서 y = ax² + bx + c의 a, b, c 값 찾기
뉴톤법 (지역해) brute (전역해) curve_fit root
linalg 선형대수 scipy.linalg
"행렬 연산으로 공간 변환·방정식 풀기·데이터 분해를 처리"
  • 기하학적 변환을 행렬로 표현 — Scaling · Rotation · Shear · Hyperbolic rotation
  • 역행렬 · 고유값(eigenvalue) 분해 · LU 분해 등 핵심 연산 제공
  • 연립 선형방정식 Ax = b 형태의 해를 빠르게 계산
💡 새 개념
행렬 변환 Matrix Transform
  • Scaling → 크기 늘리기/줄이기
  • Rotation → 회전
  • Shear → 비틀기 (평행사변형 변형)
  • 이미지 편집·3D 그래픽의 기본 연산
사진 회전·확대 = 픽셀 좌표에 행렬 변환 적용
고유값 분해 Eigenvalue Decomposition
  • 행렬이 어떤 방향으로 공간을 늘리고 줄이는지 분해
  • PCA(주성분 분석)·추천 시스템의 핵심 연산
데이터의 분산이 가장 큰 방향 찾기 = 고유벡터
LU 분해
  • 행렬을 하삼각(L)·상삼각(U) 행렬로 분해
  • 연립방정식을 빠르게 풀기 위한 사전 계산
stats 통계 scipy.stats
"확률 분포를 다루고, 가설 검정으로 데이터의 의미를 판단"
rvs 난수 생성
분포를 따르는 무작위 샘플 생성
Random Variates
pdf 확률 밀도 함수
특정 값이 얼마나 자주 나타나는지
그래프의 높이 값
cdf 누적 분포 함수
x 이하일 확률 → 면적 누적
0~1 사이 값 반환
ppf 분위수 함수
CDF의 역함수
"상위 5% 기준값은?"에 답변
  • 가설 검정 (t-test, chi-square 등) · 기술통계 · 확률 계산까지 포함
💡 새 개념
확률 밀도 함수 PDF
  • 연속 확률 변수에서 특정 값 근처에 있을 확률 밀도
  • 그래프 아래 전체 넓이 = 1 (전체 확률)
  • 정규분포의 종 모양 곡선이 대표적
키 175cm 근처 사람이 얼마나 많은지 표현
누적 분포 함수 CDF
  • X ≤ x일 확률 — 왼쪽부터 면적 누적
  • 0에서 시작해 1로 수렴하는 단조증가 함수
키가 170cm 이하일 확률 = CDF(170)
가설 검정 Hypothesis Testing
  • "이 차이가 우연인가, 진짜 차이인가?"를 통계적으로 판단
  • p-value < 0.05 → 우연이 아닐 가능성 높음
신약 효과가 위약과 진짜 다른지 검증
FFT Fast Fourier Transform · 고속 푸리에 변환 scipy.fft
"복잡한 신호를 '어떤 주파수들의 합인가'로 분해하는 것"
  • 시간 축 → 주파수 축으로 데이터를 변환
  • 파장·주기성 있는 신호에서 숨은 주파수 성분 탐지
  • 활용 : 신호처리 · 영상처리 · 음향·진동 분석 · 금융 시계열
💡 새 개념
푸리에 변환 Fourier Transform
  • 어떤 복잡한 신호도 단순한 sin·cos 파의 합으로 분해 가능
  • 시간 도메인 → 주파수 도메인으로 관점 전환
화음을 도·미·솔 각 음으로 분리하는 것과 같은 원리
주파수 도메인
  • 신호를 "어떤 주파수가 얼마나 강한가"로 표현
  • 시간 도메인에서 보이지 않던 반복 패턴이 명확해짐
잡음 섞인 심전도에서 특정 주파수 노이즈만 제거
FFT vs DFT
  • DFT(이산 푸리에 변환) = 원래 알고리즘 → O(n²) 느림
  • FFT = DFT를 최적화한 알고리즘 → O(n log n) 빠름
  • 실무에서는 항상 FFT 사용
interpolation 보간 scipy.interpolate
"알고 있는 점들 사이의 모르는 값을 수학적으로 추정하는 것"
  • 알려진 데이터 포인트 사이의 중간값을 추정
  • 데이터가 불연속적이거나 일부가 누락된 경우 활용
Linear (선형)
두 점을 직선으로 연결
가장 단순 · 빠름
Cubic (3차)
부드러운 곡선으로 연결
자연스러운 형태
Akima
이상치 영향 최소화
국소적으로 부드러운 곡선
💡 새 개념
보간 vs 외삽
  • 보간(Interpolation) → 데이터 범위 의 값 추정 (신뢰 높음)
  • 외삽(Extrapolation) → 데이터 범위 의 값 추정 (오차 위험)
1월·3월 데이터로 2월 추정 = 보간 / 4월 예측 = 외삽
스플라인 Spline
  • 데이터 포인트를 부드럽게 연결하는 구간별 다항식
  • Cubic spline이 가장 많이 사용
  • 각 구간이 매끄럽게 이어지도록 연속성 조건 부여
ndimage N차원 이미지 처리 scipy.ndimage
"이미지를 숫자 배열로 보고, 수학 연산으로 필터·변형·분석하는 것"
  • 필터링 — 블러 · 샤프닝 · 엣지 검출
  • 형태학적 연산 — 침식(erosion) · 팽창(dilation) · 열기 · 닫기
  • 객체 레이블링 — 이미지에서 연결된 영역(객체)을 자동으로 구분
  • CNN의 컨볼루션 연산과 동일한 수학적 원리 (커널과 이미지의 합성곱)
💡 새 개념
컨볼루션 Convolution
  • 작은 커널(필터) 행렬을 이미지에 슬라이딩하며 적용
  • 커널 종류에 따라 블러 · 엣지 검출 · 샤프닝 효과
  • 딥러닝 CNN의 핵심 연산과 동일한 원리
3×3 커널로 이미지 전체를 훑으며 각 위치의 특징 추출
형태학적 연산 Morphology
  • 침식(Erosion) → 객체를 작게 축소, 작은 노이즈 제거
  • 팽창(Dilation) → 객체를 크게 확장, 구멍 채우기
  • 의료 영상 · 불량 검출 등에 활용
X-ray 이미지에서 종양 경계 강조
레이블링 Labeling
  • 이미지에서 연결된 픽셀 그룹을 하나의 객체로 인식
  • 각 객체에 고유 번호(레이블) 부여
혈액 이미지에서 세포 개수 자동 카운팅
ndimage vs CNN의 차이
· ndimage → 사람이 설계한 커널(규칙 기반) 적용
· CNN → 학습을 통해 커널을 자동으로 최적화 — 원리는 같지만 커널이 고정이냐 학습이냐의 차이
728x90