Python 튜토리얼의 SciPy: 라이브러리, 함수 및 예제란 무엇입니까?

Python의 SciPy

Python의 SciPy 수학, 과학, 공학 및 기술 문제를 해결하는 데 사용되는 오픈 소스 라이브러리입니다. 이를 통해 사용자는 광범위한 고급 Python 명령을 사용하여 데이터를 조작하고 데이터를 시각화할 수 있습니다. SciPy는 Python NumPy 확장을 기반으로 구축되었습니다. SciPy는 "Sigh Pi"라고도 발음됩니다.

SciPy의 하위 패키지:

SciPy를 사용하는 이유

  • SciPy에는 과학적 계산과 관련된 가장 일반적인 문제를 해결하는 데 도움이 되는 다양한 하위 패키지가 포함되어 있습니다.
  • Python의 SciPy 패키지는 C/C++ 또는 Matlab용 GNU 과학 라이브러리에 이어 가장 많이 사용되는 과학 라이브러리입니다.
  • 사용하기 쉽고 이해하기 쉬우며 계산 능력도 빠릅니다.
  • NumPy 라이브러리 배열에서 작동할 수 있습니다.

Numpy VS SciPy

누피

  • Numpy는 C로 작성되었으며 수학적 또는 수치 계산에 사용됩니다.
  • 다른 Python 라이브러리보다 빠릅니다.
  • Numpy는 데이터 과학이 기본 계산을 수행하는 데 가장 유용한 라이브러리입니다.
  • Numpy에는 정렬, 형성, 인덱싱 등과 같은 가장 기본적인 작업을 수행하는 배열 데이터 유형만 포함되어 있습니다.

SciPy

  • SciPy는 NumPy 위에 구축되었습니다.
  • Python의 SciPy 모듈은 선형 대수학의 모든 기능을 갖춘 버전인 반면 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 및 바이너리 형식과 같은 다양한 파일 형식으로 작업할 수 있는 광범위한 기능을 갖추고 있습니다.

MatLab에서 정기적으로 사용되는 Python 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: I/O 패키지 및 Numpy를 사용하여 Python에서 필수 SciPy 라이브러리를 가져옵니다.
  • 라인 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 요소를 계산합니다.wise.

예:

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차원 배열임을 분명히 알 수 있습니다.
  • com을 포함하는 입력plex 두 점을 제외하고 값은 XNUMX입니다.
  • 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) 

출력:

SciPy의 최적화 및 적합성

최적화가 성공적으로 종료되었습니다.

현재 함수 값: -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()

출력:

SciPy를 사용한 이미지 처리

이제, 우리 플립다운 현재 이미지:

#Flip Down using scipy misc.face image  
flip_down = np.flipud(misc.face())
plt.imshow(flip_down)
plt.show()

출력:

SciPy를 사용한 이미지 처리

예: 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는 수치 적분과 기능을 통합하는 기능을 제공합니다.
  • scipy.통합 라이브러리에는 단일 통합이 있습니다. double, 삼중, 다중, 가우스 정방형, Romberg, 사다리꼴 및 심슨의 규칙.

예: 이제 예를 들어보자 단일 통합

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 예를 들어 보겠습니다. double 완성. 우리는 double 추종자의 통합wing 방정식,

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 선형대수학 연산
scipy.보간 보간법
scipy.최적화 최적화 및 핏
scipy.stats 통계 및 난수
scipy.통합 수치 적분
scipy.fftpack 고속 푸리에 변환
scipy.signal 신호 처리
scipy.nd이미지 이미지 조작 -