SciPy ind Python Selvstudium: Hvad er, bibliotek, funktion og eksempler
SciPy ind Python
SciPy ind Python er et open source-bibliotek, der bruges til at lรธse matematiske, videnskabelige, tekniske og tekniske problemer. Det giver brugerne mulighed for at manipulere dataene og visualisere dataene ved hjรฆlp af en bred vifte af hรธjt niveau Python kommandoer. SciPy er bygget pรฅ Python NumPy-udvidelse. SciPy udtales ogsรฅ som "Sigh Pi."
Underpakker af SciPy:
- Fil input/output โ scipy.io
- Sรฆrlig funktion โ scipy.special
- Lineรฆr algebra Operation - scipy.linalg
- Interpolation โ scipy.interpolere
- Optimering og pasform โ scipy.optimize
- Statistik og tilfรฆldige tal โ scipy.stats
- Numerisk integration โ scipy.integrate
- Hurtige Fourier-transformationer โ scipy.fftpack
- Signal Behandling โ scipy.signal
- Billedmanipulation - scipy.ndimage
Hvorfor bruge SciPy
- SciPy indeholder varianter af underpakker, som hjรฆlper med at lรธse det mest almindelige problem relateret til videnskabelig beregning.
- SciPy pakke ind Python er det mest brugte videnskabelige bibliotek kun nรฆst efter GNU Scientific Library for C/C++ eller Matlabs.
- Nem at bruge og forstรฅ samt hurtig beregningskraft.
- Det kan fungere pรฅ en rรฆkke NumPy-biblioteker.
Numpy VS SciPy
numpy
- Numpy skrives i C og bruges til matematisk eller numerisk beregning.
- Det er hurtigere end andre Python Biblioteker
- Numpy er det mest nyttige bibliotek for Data Science til at udfรธre grundlรฆggende beregninger.
- Numpy indeholder intet andet end array-datatype, som udfรธrer den mest grundlรฆggende handling som sortering, formgivning, indeksering osv.
SciPy
- SciPy er bygget i toppen af โโNumPy
- SciPy-modul i Python er en fuldt udstyret version af Linear Algebra, mens Numpy kun indeholder nogle fรฅ funktioner.
- De fleste nye Data Science-funktioner er tilgรฆngelige i Scipy i stedet for Numpy.
SciPy โ Installation og miljรธopsรฆtning
Du kan ogsรฅ installere SciPy i Windows via pip
Python3 -m pip install --user numpy scipy
Installer Scipy pรฅ Linux
sudo apt-get install python-scipy python-numpy
Installer SciPy pรฅ Mac
sudo port install py35-scipy py35-numpy
Fรธr vi begynder at lรฆre SciPy Python, skal du kende grundlรฆggende funktionalitet sรฅvel som forskellige typer af en rรฆkke nusset
Standardmรฅden at importere SciPy-moduler og Numpy:
from scipy import special #same for other modules import numpy as np
Filinput/outputpakke
Scipy, I/O-pakke, har en lang rรฆkke funktioner til arbejde med forskellige filformater som er Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV og binรฆrt format.
Lad os tage et filformat Python SciPy-eksempel som regelmรฆssigt bruges i MatLab:
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']
Output:
array([[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.],
[ 1., 1., 1., 1.]])
Kode Forklaring
- Linje 1 og 2: Importer det vรฆsentlige SciPy-bibliotek ind Python med I/O-pakke og Numpy.
- Linje 3: Opret 4 x 4, dimensionelt ens array
- Linje 4: Gem array i eksempel.mat fil.
- Linje 5: Hent data fra eksempel.mat fil
- Linje 6: Udskriv output.
Specialfunktionspakke
- scipy.special pakken indeholder adskillige funktioner i matematisk fysik.
- SciPy specialfunktion inkluderer Cubic Root, Exponential, Log Sum Exponential, Lambert, Permutation og Kombinationer, Gamma, Bessel, hypergeometrisk, Kelvin, beta, parabolsk cylinder, Relative Error Exponential osv.
- For en linjebeskrivelse skal du indtaste alle disse funktioner Python konsol:
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.
Cubic Root Funktion
Cubic Root-funktionen finder kubikroden af โโvรฆrdier.
Syntaks:
scipy.special.cbrt(x)
Eksempel:
from scipy.special import cbrt #Find cubic root of 27 & 64 using cbrt() function cb = cbrt([27, 64]) #print value of cb print(cb)
Output: array([3., 4.])
Eksponentiel funktion:
Eksponentiel funktion beregner 10**x element-vis.
Eksempel:
from scipy.special import exp10 #define exp10 function and pass value in its exp = exp10([1,10]) print(exp)
Output: [1.e+01 1.e+10]
Permutationer og kombinationer
SciPy giver ogsรฅ funktionalitet til at beregne permutationer og kombinationer.
Kombinationer - scipy.special.comb(N,k)
Eksempel:
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)
Output: 15.0
Permutationer โ
scipy.special.perm(N,k)
Eksempel:
from scipy.special import perm #find permutation of 5, 2 using perm (N, k) function per = perm(5, 2, exact = True) print(per)
Output: 20
Log Sum eksponentiel funktion
Log Sum Exponential beregner loggen for sum eksponentielt inputelement.
Syntaks:
scipy.special.logsumexp(x)
Bessel funktion
Beregningsfunktion for N. heltal
Syntaks:
scipy.special.jn()
Lineรฆr algebra med SciPy
- Linear Algebra of SciPy er en implementering af BLAS- og ATLAS LAPACK-biblioteker.
- Lineรฆr Algebras ydeevne er meget hurtig sammenlignet med BLAS og LAPACK.
- Lineรฆr algebrarutine accepterer et todimensionelt arrayobjekt, og output er ogsรฅ et todimensionelt array.
Lad os nu lave en test med scipy.linalg,
beregning determinanten af en todimensionel matrix,
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 )
Output: -7.0
Invers matrix โ
scipy.linalg.inv()
Inverse Matrix of Scipy beregner den inverse af enhver kvadratisk matrix.
Lad os se,
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 )
Output:
array( [[-0.28571429, 0.71428571],
[ 0.42857143, -0.57142857]] )
Egenvรฆrdier og egenvektor
scipy.linalg.eig()
- Det mest almindelige problem i lineรฆr algebra er egenvรฆrdier og egenvektor, som nemt kan lรธses vha eig()funktion.
- Lad os nu finde egenvรฆrdien af โโ(X) og svarer til egenvektor for en todimensionel kvadratisk matrix.
Eksempel
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)
Output:
[ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ]
Diskret Fourier Transform โ scipy.fftpack
- DFT er en matematisk teknik, som bruges til at konvertere rumlige data til frekvensdata.
- FFT (Fast Fourier Transformation) er en algoritme til beregning af DFT
- FFT anvendes pรฅ et multidimensionelt array.
- Frekvens definerer antallet af signaler eller bรธlgelรฆngder i en bestemt tidsperiode.
Eksempel: Tag en bรธlge og vis ved hjรฆlp af Matplotlib-biblioteket. vi tager et simpelt periodisk funktionseksempel pรฅ 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()
Output:
Du kan se dette. Frekvensen er 5 Hz, og dets signal gentages pรฅ 1/5 sekund โ det er opkald som en bestemt tidsperiode.
Lad os nu bruge denne sinusbรธlge ved hjรฆlp af DFT-applikation.
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()
Output:
- Du kan tydeligt se, at output er et endimensionelt array.
- Input, der indeholder komplekse vรฆrdier, er nul undtagen to punkter.
- I DFT-eksemplet visualiserer vi signalets stรธrrelse.
Optimering og tilpasning til SciPy โ scipy.optimize
- Optimering giver en nyttig algoritme til minimering af kurvetilpasning, multidimensional eller skalar- og rodtilpasning.
- Lad os tage et eksempel pรฅ en skalar funktion,for at finde minimum skalarfunktion.
%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)
Output:
Optimeringen blev afsluttet.
Nuvรฆrende funktionsvรฆrdi: -23.241676
Gentagelser: 4
Funktionsevalueringer: 18
Gradientevalueringer: 6
array([-1.67096375])
- I dette eksempel udfรธres optimering ved hjรฆlp af gradient descent-algoritmen fra startpunktet
- Men det mulige problem er lokale minima i stedet for globale minima. Hvis vi ikke finder en nabo til globale minima, sรฅ er vi nรธdt til at anvende global optimering og finde globale minima-funktion, der bruges som bassinhopping() som kombinerer lokal optimizer.
optimize.basinhopping(funktion, 0)
Output:
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-Mead-algoritme:
- Nelder-Mead algoritme vรฆlger gennem metode parameter.
- Det giver den mest ligetil mรฅde at minimere pรฅ for en fair opfรธrt funktion.
- Nelder โ Mead-algoritmen bruges ikke til gradientevalueringer, fordi det kan tage lรฆngere tid at finde lรธsningen.
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")
Output:
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])
Billedbehandling med SciPy โ scipy.ndimage
- scipy.ndimage er et undermodul af SciPy, som mest bruges til at udfรธre en billedrelateret operation
- ndimage betyder det "n" dimensionelle billede.
- SciPy Image Processing giver geometrisk transformation (roter, beskรฆr, vend), billedfiltrering (skarp og de nosing), displaybillede, billedsegmentering, klassificering og ekstraktion af funktioner.
- MISC-pakke i SciPy indeholder forudbyggede billeder, som kan bruges til at udfรธre billedmanipulationsopgaver
Eksempel: Lad os tage et geometrisk transformationseksempel pรฅ billeder
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()
Output:
Nu er vi Flip ned nuvรฆrende billede:
#Flip Down using scipy misc.face image flip_down = np.flipud(misc.face()) plt.imshow(flip_down) plt.show()
Output:
Eksempel: Rotation af billede ved hjรฆlp af 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()
Output:
Integration med Scipy โ Numerisk integration
- Nรฅr vi integrerer en funktion, hvor analytisk integration ikke er mulig, er vi nรธdt til at vende os til numerisk integration
- SciPy giver funktionalitet til at integrere funktion med numerisk integration.
- scipy.integrate biblioteket har enkelt integration, dobbelt, tredobbelt, multiplum, Gaussisk kvadrat, Romberg, Trapez og Simpsons regler.
Eksempel: Tag nu et eksempel pรฅ Enkelt integration
Her a er den รธvre grรฆnse og b er den nedre grรฆnse
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)
Output:
(0.33333333333333337, 3.700743415417189e-15)
Her returnerer funktionen to vรฆrdier, hvor den fรธrste vรฆrdi er integration og den anden vรฆrdi er estimeret fejl i integralet.
Eksempel: Tag nu et SciPy eksempel pรฅ dobbelt integration. Vi finder den dobbelte integration af fรธlgende ligning,
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)
Output:
(3.0, 9.657432734515774e-14)
Du har set ovenstรฅende output som samme forrige.
Resumรฉ
- SciPy (udtales som "Sigh Pi") er en Open Source Python-baseret bibliotek, som bruges i matematik, videnskabelig databehandling, teknik og teknisk databehandling.
- SciPy indeholder varianter af underpakker, som hjรฆlper med at lรธse det mest almindelige problem relateret til videnskabelig beregning.
- SciPy er bygget i toppen af โโNumPy
| Package Name | Beskrivelse |
|---|---|
| scipy.io | Fil input/output |
| scipy.special | Specialfunktion |
| scipy.linalg | Lineรฆr algebra Operation |
| scipy.interpolere | interpolation |
| scipy.optimize | Optimering og pasform |
| scipy.stats | Statistik og tilfรฆldige tal |
| scipy.integrate | Numerisk integration |
| scipy.fftpack | Hurtige Fourier-transformationer |
| scipy.signal | Signal Behandles |
| scipy.ndimage | Billedmanipulation - |








