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:

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:

Diskret Fourier Transform

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:

Diskret Fourier Transform

  • 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:

Optimering og tilpasning i SciPy

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:

Billedbehandling med SciPy

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:

Billedbehandling med SciPy

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:

Billedbehandling med SciPy

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

Integration med Scipy

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,

Integration med 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)

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 Description
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 -