본문 바로가기
python

Scipy 기초사용법 (최적화, 통계, 신호처리,선형대수)

by 타닥타닥 토다토닥 부부 2023. 4. 16.
반응형

Scipy 기초사용법 (최적화/optimize,  통계/stats, 신호처리/sigmal ,선형대수/linalg)

 

0.설명

# SciPy는 과학, 수학, 엔지니어링 등에 사용되는 고급 계산 기능을 제공하는 Python 라이브러리입니다. 
# 선형 대수, 통계, 신호 처리, 최적화 등 다양한 분야의 기능을 제공합니다.

 

1. 라이브러리 임포트

import numpy as np
import scipy

 

2. 선형대수(scipy.linalg)

  • 역행렬 계산
import numpy as np
from scipy import linalg

A = np.array([[1, 2],
              [3, 4]])
B = np.array([5, 6])

# 역행렬 계산
A_inv = linalg.inv(A)
print(A_inv)

# out : array([[-2. ,  1. ], [ 1.5, -0.5]])
 

 

  • 행렬식 계산
from scipy import linalg

A = np.array([[1, 2], [3, 4]])
B = np.array([5, 6])

# 행렬식 계산
det_A = linalg.det(A)
print(det_A)

# out : -2.0
  • 선형 연립방정식 풀기
# 아래와 같은 선형 방정식 시스템이 있다고 가정하고 예시 코드를 작성합니다.
# x + 2y = 5
# 3x + 4y = 6

import numpy as np
from scipy import linalg

# 계수 행렬 (A) 생성
A = np.array([[1, 2],
              [3, 4]])

# 상수 벡터 (B) 생성
B = np.array([5, 6])

# 선형 방정식 풀기
x = linalg.solve(A, B)

print(x)  
# out : [-4.  4.5]

 

3. 최적화(scipy.optimize)

# 다음과 같은 목적 함수를 최소화하는 문제를 생각해 봅시다.
# f(x) = x^2 + 6x + 9

import numpy as np
from scipy import optimize

# 목적 함수 정의
def func(x):
    return x**2 + 6*x + 9

# 초기 추측값 설정 (x0)
x0 = 0

# 최적화 수행
result = optimize.minimize(func, x0)

# 최적화 결과 출력
optimal_x = result.x
# optimal_value = result.fun

# x 가 -3 일때 최소값 0 도출
print(optimal_x)  
# out : [-3.]

print(optimal_value)  
# out : 0.0

 

4. 통계(scipy.stats)

  • 평균
from scipy import stats

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 평균
mean = np.mean(data)
  • 중앙값
from scipy import stats

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 중앙값
median = np.median(data)
  • 표준편차
from scipy import stats

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

#표준편차
std = np.std(data)
  • 정규성검정
from scipy import stats

data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 정규성 검정 (Shapiro-Wilk 검정)
statistic, pvalue = stats.shapiro(data)

 

5. 신호 처리 (scipy.signal)

from scipy import signal

x = np.linspace(0, 10, 100)
y = np.sin(x)

# Savitzky-Golay 필터를 사용한 스무딩
smoothed_y = signal.savgol_filter(y, window_length=5, polyorder=3)

 

반응형

댓글