사이파이 Python 튜토리얼: 라이브러리란 무엇인가, 함수 및 예시
사이파이 Python
사이파이 Python 수학, 과학, 공학, 기술 문제를 해결하는 데 사용되는 오픈 소스 라이브러리입니다. 이를 통해 사용자는 광범위한 고급 수준을 사용하여 데이터를 조작하고 데이터를 시각화할 수 있습니다. Python 명령. SciPy는 다음을 기반으로 구축되었습니다. Python NumPy 확장. SciPy는 "Sigh Pi"라고도 발음됩니다.
SciPy의 하위 패키지:
- 파일 입출력 – scipy.io
- 특수 기능 – scipy.special
- 선형 대수학 Opera설명 – scipy.linalg
- 보간 - scipy.보간
- 최적화 및 핏 - scipy.최적화
- 통계 및 난수 – scipy.stats
- 수치적분 – scipy.통합
- 고속 푸리에 변환 – scipy.fftpack
- Signal 처리 – scipy.signal
- 이미지 조작 - scipy.nd이미지
SciPy를 사용하는 이유
- SciPy에는 과학적 계산과 관련된 가장 일반적인 문제를 해결하는 데 도움이 되는 다양한 하위 패키지가 포함되어 있습니다.
- SciPy 패키지 Python C/용 GNU 과학 라이브러리 다음으로 가장 많이 사용되는 과학 라이브러리입니다.C++ 또는 Matlab의.
- 사용하기 쉽고 이해하기 쉬우며 계산 능력도 빠릅니다.
- NumPy 라이브러리의 배열에서 작동할 수 있습니다.
Numpy VS SciPy
누피
- Numpy는 C로 작성되었으며 수학적 또는 수치 계산에 사용됩니다.
- 다른 것보다 빠르네요 Python 도서관
- Numpy는 데이터 과학이 기본 계산을 수행하는 데 가장 유용한 라이브러리입니다.
- Numpy에는 정렬, 셰이핑, 인덱싱 등 가장 기본적인 작업을 수행하는 배열 데이터 유형만 포함되어 있습니다.
SciPy
- SciPy는 NumPy 위에 구축되었습니다.
- SciPy 모듈 Python Numpy에는 몇 가지 기능만 포함되어 있지만 선형 대수학의 모든 기능을 갖춘 버전입니다.
- 대부분의 새로운 데이터 과학 기능은 Numpy가 아닌 Scipy에서 사용할 수 있습니다.
SciPy – 설치 및 환경 설정
SciPy를 설치할 수도 있습니다. Windows 핍을 통해
Python3 -m pip install --user numpy scipy
Linux에 Scipy 설치
sudo apt-get install python-scipy python-numpy
Mac에 SciPy 설치
sudo port install py35-scipy py35-numpy
SciPy를 배우기 전에 Python, 기본 기능은 물론 다양한 유형의 배열을 알아야 합니다. 눔 파이
SciPy 모듈과 Numpy를 가져오는 표준 방법:
from scipy import special #same for other modules import numpy as np
파일 입력/출력 패키지
I/O 패키지인 Scipy는 Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV 및 바이너리 형식과 같은 다양한 파일 형식으로 작업할 수 있는 광범위한 기능을 갖추고 있습니다.
하나의 파일 형식을 사용하겠습니다. Python MatLab에서 정기적으로 사용되는 SciPy 예:
import numpy as np from scipy import io as sio array = np.ones((4, 4)) sio.savemat('example.mat', {'ar': array}) data = sio.loadmat(‘example.mat', struct_as_record=True) data['ar']
출력:
array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]])
코드 설명
- 라인 1 및 2: 필수 SciPy 라이브러리를 다음으로 가져옵니다. Python I/O 패키지와 Numpy를 사용합니다.
- 라인 3: 4 x 4 차원의 배열 생성
- 라인 4: 배열을 저장합니다. 예제.매트 파일.
- 5 라인 : 데이터 가져오기 예제.매트 파일
- 라인 6: 출력물을 인쇄합니다.
특수 기능 패키지
- scipy.special 패키지에는 수리 물리학의 다양한 기능이 포함되어 있습니다.
- SciPy 특수 기능에는 입방근, 지수, 로그 합계 지수, 램버트, 순열 및 조합, 감마, 베셀, 초기하, 켈빈, 베타, 포물선 실린더, 상대 오차 지수 등이 포함됩니다.
- 이 모든 기능에 대한 한 줄 설명을 위해 다음을 입력하십시오. Python 콘솔:
help(scipy.special) Output: NAME scipy.special DESCRIPTION ======================================== Special functions (:mod:`scipy.special`) ======================================== .. module:: scipy.special Nearly all of the functions below are universal functions and follow broadcasting and automatic array-looping rules. Exceptions are noted.
XNUMX차근 함수
입방근 함수는 값의 입방근을 찾습니다.
구문 :
scipy.special.cbrt(x)
예:
from scipy.special import cbrt #Find cubic root of 27 & 64 using cbrt() function cb = cbrt([27, 64]) #print value of cb print(cb)
출력: 배열([3., 4.])
지수 함수:
지수 함수는 10**x를 요소별로 계산합니다.
예:
from scipy.special import exp10 #define exp10 function and pass value in its exp = exp10([1,10]) print(exp)
출력: [1.e+01 1.e+10]
순열 및 조합
SciPy는 순열과 조합을 계산하는 기능도 제공합니다.
조합 – scipy.special.comb(N,k)
예:
from scipy.special import comb #find combinations of 5, 2 values using comb(N, k) com = comb(5, 2, exact = False, repetition=True) print(com)
출력: 15.0
순열 –
scipy.special.perm(N,k)
예:
from scipy.special import perm #find permutation of 5, 2 using perm (N, k) function per = perm(5, 2, exact = True) print(per)
출력: 20
로그합 지수함수
로그 합계 지수(Log Sum Exponential)는 합계 지수 입력 요소의 로그를 계산합니다.
구문 :
scipy.special.logsumexp(x)
베셀 함수
N번째 정수 차수 계산 기능
구문 :
scipy.special.jn()
SciPy를 사용한 선형 대수학
- SciPy의 선형 대수학은 BLAS 및 ATLAS LAPACK 라이브러리를 구현한 것입니다.
- 선형 대수학의 성능은 BLAS 및 LAPACK에 비해 매우 빠릅니다.
- 선형 대수 루틴은 XNUMX차원 배열 객체를 허용하며 출력도 XNUMX차원 배열입니다.
이제 몇 가지 테스트를 해보겠습니다. scipy.linalg,
계산 중 결정자 XNUMX차원 행렬의
from scipy import linalg import numpy as np #define square matrix two_d_array = np.array([ [4,5], [3,2] ]) #pass values to det() function linalg.det( two_d_array )
출력: -7.0
역행렬 –
scipy.linalg.inv()
Scipy의 역행렬은 모든 정사각 행렬의 역행렬을 계산합니다.
보자,
from scipy import linalg import numpy as np # define square matrix two_d_array = np.array([ [4,5], [3,2] ]) #pass value to function inv() linalg.inv( two_d_array )
출력:
array( [[-0.28571429, 0.71428571], [ 0.42857143, -0.57142857]] )
고유값과 고유벡터
scipy.linalg.eig()
- 선형대수학에서 가장 일반적인 문제는 고유값과 고유벡터입니다. 에이그()기능.
- 이제 우리는 (X) 및 XNUMX차원 정사각 행렬의 고유벡터에 해당합니다.
예시
from scipy import linalg import numpy as np #define two dimensional array arr = np.array([[5,4],[6,3]]) #pass value into function eg_val, eg_vect = linalg.eig(arr) #get eigenvalues print(eg_val) #get eigenvectors print(eg_vect)
출력:
[ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ]
이산 푸리에 변환 - scipy.fftpack
- DFT는 공간 데이터를 주파수 데이터로 변환하는 데 사용되는 수학적 기술입니다.
- FFT(Fast Fourier Transformation)는 DFT를 계산하기 위한 알고리즘입니다.
- FFT는 다차원 배열에 적용됩니다.
- 주파수는 특정 기간의 신호 또는 파장 수를 정의합니다.
예: Matplotlib 라이브러리를 사용하여 파도를 타고 보여주세요. sin(20 × 2πt)의 간단한 주기 함수 예제를 사용합니다.
%matplotlib inline from matplotlib import pyplot as plt import numpy as np #Frequency in terms of Hertz fre = 5 #Sample rate fre_samp = 50 t = np.linspace(0, 2, 2 * fre_samp, endpoint = False ) a = np.sin(fre * 2 * np.pi * t) figure, axis = plt.subplots() axis.plot(t, a) axis.set_xlabel ('Time (s)') axis.set_ylabel ('Signal amplitude') plt.show()
출력:
이것을 볼 수 있습니다. 주파수는 5Hz이고 신호는 1/5초마다 반복됩니다. 이를 특정 기간이라고 합니다.
이제 DFT 응용 프로그램의 도움으로 이 정현파를 사용해 보겠습니다.
from scipy import fftpack A = fftpack.fft(a) frequency = fftpack.fftfreq(len(a)) * fre_samp figure, axis = plt.subplots() axis.stem(frequency, np.abs(A)) axis.set_xlabel('Frequency in Hz') axis.set_ylabel('Frequency Spectrum Magnitude') axis.set_xlim(-fre_samp / 2, fre_samp/ 2) axis.set_ylim(-5, 110) plt.show()
출력:
- 출력이 XNUMX차원 배열임을 분명히 알 수 있습니다.
- 복소수 값을 포함하는 입력은 두 점을 제외하고 0입니다.
- DFT 예에서는 신호의 크기를 시각화합니다.
SciPy의 최적화 및 맞춤 – scipy.optimize
- 최적화는 곡선 피팅, 다차원 또는 스칼라 및 루트 피팅을 최소화하는 데 유용한 알고리즘을 제공합니다.
- 의 예를 들어보자 스칼라 함수,최소 스칼라 함수를 구합니다.
%matplotlib inline import matplotlib.pyplot as plt from scipy import optimize import numpy as np def function(a): return a*2 + 20 * np.sin(a) plt.plot(a, function(a)) plt.show() #use BFGS algorithm for optimization optimize.fmin_bfgs(function, 0)
출력:
최적화가 성공적으로 종료되었습니다.
현재 함수 값: -23.241676
반복: 4
기능 평가: 18
기울기 평가: 6
배열([-1.67096375])
- 이 예에서는 초기점부터 경사하강법 알고리즘을 사용하여 최적화를 수행합니다.
- 그러나 가능한 문제는 전역 최소값 대신 로컬 최소값입니다. 전역 최소값의 이웃을 찾지 못하면 전역 최적화를 적용하고 다음과 같이 사용되는 전역 최소값 함수를 찾아야 합니다. 유역 호핑() 로컬 옵티마이저를 결합한 것입니다.
최적화.분지호핑(함수, 0)
출력:
fun: -23.241676238045315 lowest_optimization_result: fun: -23.241676238045315 hess_inv: array([[0.05023331]]) jac: array([4.76837158e-07]) message: 'Optimization terminated successfully.' nfev: 15 nit: 3 njev: 5 status: 0 success: True x: array([-1.67096375]) message: ['requested number of basinhopping iterations completed successfully'] minimization_failures: 0 nfev: 1530 nit: 100 njev: 510 x: array([-1.67096375])
Nelder – 미드 알고리즘:
- Nelder-Mead 알고리즘은 방법 매개변수를 통해 선택합니다.
- 이는 공정하게 동작하는 기능을 최소화하는 가장 간단한 방법을 제공합니다.
- Nelder – Mead 알고리즘은 해를 찾는 데 시간이 더 오래 걸릴 수 있으므로 기울기 평가에 사용되지 않습니다.
import numpy as np from scipy.optimize import minimize #define function f(x) def f(x): return .4*(1 - x[0])**2 optimize.minimize(f, [2, -1], method="Nelder-Mead")
출력:
final_simplex: (array([[ 1. , -1.27109375], [ 1. , -1.27118835], [ 1. , -1.27113762]]), array([0., 0., 0.])) fun: 0.0 message: 'Optimization terminated successfully.' nfev: 147 nit: 69 status: 0 success: True x: array([ 1. , -1.27109375])
SciPy를 사용한 이미지 처리 – scipy.ndimage
- scipy.ndimage는 주로 이미지 관련 작업을 수행하는 데 사용되는 SciPy의 하위 모듈입니다.
- ndimage는 "n"차원 이미지를 의미합니다.
- SciPy 이미지 처리는 기하학적 변환(회전, 자르기, 뒤집기), 이미지 필터링(샤프 및 코 제거), 이미지 표시, 이미지 분할, 분류 및 특징 추출을 제공합니다.
- 기타 패키지 SciPy에는 이미지 조작 작업을 수행하는 데 사용할 수 있는 사전 빌드된 이미지가 포함되어 있습니다.
예: 이미지의 기하학적 변환 예를 들어보겠습니다.
from scipy import misc from matplotlib import pyplot as plt import numpy as np #get face image of panda from misc package panda = misc.face() #plot or show image of face plt.imshow( panda ) plt.show()
출력:
이제, 우리 플립다운 현재 이미지:
#Flip Down using scipy misc.face image flip_down = np.flipud(misc.face()) plt.imshow(flip_down) plt.show()
출력:
예: Scipy를 사용하여 이미지 회전,
from scipy import ndimage, misc from matplotlib import pyplot as plt panda = misc.face() #rotatation function of scipy for image – image rotated 135 degree panda_rotate = ndimage.rotate(panda, 135) plt.imshow(panda_rotate) plt.show()
출력:
Scipy와의 통합 – 수치 적분
- 분석적 통합이 불가능한 기능을 통합할 때 수치적 통합을 해야 합니다.
- SciPy는 수치 적분과 기능을 통합하는 기능을 제공합니다.
- scipy.통합 라이브러리에는 단일 적분, 이중 적분, 삼중 적분, 다중 적분, 가우스 사분면, 롬버그, 사다리꼴 및 심슨의 규칙이 있습니다.
예: 이제 예를 들어보자 단일 통합
여기에 a 상한선이고 b 하한값이다
from scipy import integrate # take f(x) function as f f = lambda x : x**2 #single integration with a = 0 & b = 1 integration = integrate.quad(f, 0 , 1) print(integration)
출력:
(0.33333333333333337, 3.700743415417189e-15)
여기서 함수는 두 개의 값을 반환합니다. 첫 번째 값은 적분이고 두 번째 값은 적분에서 추정된 오류입니다.
예: 이제 SciPy 예를 들어 보겠습니다. 이중 통합. 우리는 다음 방정식의 이중 적분을 찾습니다.
from scipy import integrate import numpy as np #import square root function from math lib from math import sqrt # set fuction f(x) f = lambda x, y : 64 *x*y # lower limit of second integral p = lambda x : 0 # upper limit of first integral q = lambda y : sqrt(1 - 2*y**2) # perform double integration integration = integrate.dblquad(f , 0 , 2/4, p, q) print(integration)
출력:
(3.0, 9.657432734515774e-14)
위의 출력이 이전 출력과 동일하다는 것을 확인했습니다.
제품 개요
- SciPy(“Sigh Pi”로 발음)는 오픈 소스입니다. Python수학, 과학 컴퓨팅, 엔지니어링, 기술 컴퓨팅에 사용되는 기반 라이브러리입니다.
- SciPy에는 과학적 계산과 관련된 가장 일반적인 문제를 해결하는 데 도움이 되는 다양한 하위 패키지가 포함되어 있습니다.
- SciPy는 NumPy 위에 구축되었습니다.
패키지 이름 | 기술설명 |
---|---|
scipy.io | 파일 입출력 |
scipy.special | 특수 기능 |
scipy.linalg | 선형 대수학 Opera기 |
scipy.보간 | 보간법 |
scipy.최적화 | 최적화 및 핏 |
scipy.stats | 통계와 난수 |
scipy.통합 | 수치 적분 |
scipy.fftpack | 고속 푸리에 변환 |
scipy.signal | Signal 처리 |
scipy.nd이미지 | 이미지 조작 - |