산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

파이썬 SciPy: 라이브러리 & 함수 종합 튜토리얼

파이썬 SciPy: 라이브러리 & 함수 종합 튜토리얼

파이썬 SciPy

SciPy는 NumPy를 확장해 수학, 과학, 공학, 기술 문제 해결 도구를 제공하는 오픈소스 라이브러리입니다. NumPy 위에 구축된 SciPy는 데이터 조작과 시각화를 위한 광범위한 고수준 명령을 제공합니다.

서브 패키지

이 튜토리얼 다룰 내용:

왜 SciPy를 사용하는가?

NumPy vs SciPy

NumPy

SciPy

설치 & 환경 설정

pip나 시스템 패키지 매니저로 SciPy 설치:

Python3 -m pip install --user numpy scipy
sudo apt-get install python-scipy python-numpy
sudo port install py35-scipy py35-numpy

스크립트에서 SciPy와 NumPy 임포트:

from scipy import special
import numpy as np

scipy.io로 파일 I/O

MATLAB .mat 파일 쉽게 저장/로드:

import numpy as np
from scipy import io as sio
array = np.ones((4, 4))
sio.savemat('example.mat', {'ar': array})
loaded = sio.loadmat('example.mat', struct_as_record=True)
print(loaded['ar'])

출력: array([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]])

특수 함수 – scipy.special

자주 쓰이는 특수 함수 예:

선형 대수 – scipy.linalg

행렬식, 역행렬, 고윳값, 고유벡터 계산:

from scipy import linalg
import numpy as np
A = np.array([[4,5],[3,2]])
print(linalg.det(A))  # -7.0
print(linalg.inv(A))  # 역행렬
vals, vecs = linalg.eig(A)
print(vals)
print(vecs)

출력: -7.0 / 역행렬 / [9.+0.j -1.+0.j] / 고유벡터

이산 푸리에 변환 – scipy.fftpack

정현파 변환하고 스펙트럼 시각화:

%matplotlib inline
from matplotlib import pyplot as plt
import numpy as np
from scipy import fftpack

freq = 5
sample_rate = 50
t = np.linspace(0, 2, 2 * sample_rate, endpoint=False)
wave = np.sin(freq * 2 * np.pi * t)
plt.plot(t, wave)
plt.xlabel('Time (s)'); plt.ylabel('Amplitude')
plt.show()

A = fftpack.fft(wave)
frequency = fftpack.fftfreq(len(wave)) * sample_rate
plt.stem(frequency, np.abs(A))
plt.xlabel('Frequency (Hz)')
plt.ylabel('Magnitude')
plt.xlim(-sample_rate/2, sample_rate/2)
plt.ylim(0, 110)
plt.show()

최적화 – scipy.optimize

BFGS로 스칼라 함수 최솟값 찾기, basin-hopping으로 전역 탐색:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
from scipy import optimize

def func(a):
    return a*2 + 20*np.sin(a)

plt.plot(np.linspace(-10, 10, 400), func(np.linspace(-10, 10, 400)))
plt.show()

min_bfgs = optimize.fmin_bfgs(func, 0)
print('BFGS 결과:', min_bfgs)
min_basin = optimize.basinhopping(func, 0)
print('Basin-hopping 결과:', min_basin.x)

BFGS가 찾은 지역 최솟값과 basin-hopping으로 확인된 전역 최적값 출력.

Nelder-Mead 알고리즘

기울기 정보 없이 단순 무제약 최소화:

from scipy.optimize import minimize

def f(x):
    return 0.4*(1 - x[0])**2

res = minimize(f, [2, -1], method='Nelder-Mead')
print('결과:', res.x, '함수값:', res.fun)

이미지 처리 – scipy.ndimage

이미지 조작: 표시, 뒤집기, 회전, 필터 적용.

from scipy import ndimage, misc
from matplotlib import pyplot as plt

panda = misc.face()
plt.imshow(panda)
plt.title('Original')
plt.show()

flip_down = np.flipud(panda)
plt.imshow(flip_down)
plt.title('Flip Down')
plt.show()

rotated = ndimage.rotate(panda, 135)
plt.imshow(rotated)
plt.title('Rotated 135°')
plt.show()

수치 적분 – scipy.integrate

자동 오차 추정이 포함된 단일/이중 적분:

from scipy import integrate

# 0에서 1까지 x^2 단일 적분
single = integrate.quad(lambda x: x**2, 0, 1)
print('단일 적분:', single)

# 삼각 영역에서 64*x*y 이중 적분
double = integrate.dblquad(lambda x, y: 64*x*y, 0, 2/4,
                           lambda x: 0, lambda y: (1 - 2*y**2)**0.5)
print('이중 적분:', double)

둘 다 튜플 반환: (값, 추정 오차).

요약

SciPy는 NumPy를 확장해 선형 대수, 최적화, 통계, 신호 처리, 이미지 조작을 포함한 완전한 과학 계산 스택을 제공합니다. 광범위한 서브 패키지와 탄탄한 커뮤니티 지원으로 연구자와 엔지니어에게 필수적입니다.

패키지명설명
scipy.ioMATLAB, CSV, NetCDF 등 파일 입출력
scipy.special특수 수학 함수 (Bessel, Gamma 등)
scipy.linalg고급 선형대수 루틴
scipy.interpolate보간 메서드
scipy.optimize최적화와 커브 피팅 도구
scipy.stats통계 분포 & 난수 생성
scipy.integrate수치 적분 (quad, dblquad 등)
scipy.fftpack고속 푸리에 변환
scipy.signal신호 처리 유틸리티
scipy.ndimage다차원 이미지 처리

python

  1. Python print() 함수 완벽 가이드: 예제와 고급 기법
  2. Python str.count() 마스터하기: 문자 및 부분문자열 개수 세기 예제
  3. Python format() 문자열 마스터하기: 명확한 예제로 완전 정복
  4. 파이썬 람다 함수 마스터하기: 실용 예제 & 모범 사례
  5. 파이썬 abs() 함수: 숫자 & 복소수의 절댓값 구하기
  6. 파이썬 round() 함수 완전 정복: 실용 예제로 이해하기
  7. 파이썬 map() 함수 마스터하기: 문법, 예제, 모범 사례
  8. 파이썬 timeit()으로 실행 시간 측정하기: 실용 예제
  9. 파이썬 yield 마스터하기: 제너레이터 vs return 실전 가이드
  10. 파이썬 type()과 isinstance() 이해하기: 실전 예제