SciPy in Python Tutorial: Wat is, bibliotheek, functie en voorbeelden
SciPy in Python
SciPy in Python is een open-sourcebibliotheek die wordt gebruikt voor het oplossen van wiskundige, wetenschappelijke, technische en technische problemen. Het stelt gebruikers in staat de gegevens te manipuleren en de gegevens te visualiseren met behulp van een breed scala aan hoogwaardige tools Python opdrachten. SciPy is gebouwd op de Python NumPy-extensie. SciPy wordt ook uitgesproken als “Zucht Pi.”
Subpakketten van SciPy:
- Bestandinvoer/uitvoer – scipy.io
- Speciale functie - pittig.speciaal
- Lineaire algebra Operatie – scipy.linalg
- Interpolatie – scipy.interpoleren
- Optimalisatie en pasvorm – scipy.optimize
- Statistieken en willekeurige getallen – pittige.statistieken
- Numerieke integratie - scipy.integreren
- Snelle Fourier-transformaties – scipy.fftpack
- Signal Verwerking – scipy.signaal
- Beeldmanipulatie – scipy.ndimage
Waarom SciPy gebruiken?
- SciPy bevat verschillende subpakketten die helpen bij het oplossen van de meest voorkomende problemen met betrekking tot wetenschappelijke berekeningen.
- SciPy-pakket in Python is de meest gebruikte wetenschappelijke bibliotheek, op de tweede plaats na de GNU Scientific Library voor C/C++ of Matlab's.
- Gemakkelijk te gebruiken en te begrijpen, evenals snelle rekenkracht.
- Het kan werken met een reeks NumPy-bibliotheken.
Numpy versus SciPy
numpy
- Numpy is geschreven in C en wordt gebruikt voor wiskundige of numerieke berekeningen.
- Het is sneller dan anders Python bibliotheken
- Numpy is de handigste bibliotheek voor Data Science om basisberekeningen uit te voeren.
- Numpy bevat niets anders dan een array-gegevenstype waarmee de meest basale bewerkingen worden uitgevoerd, zoals sorteren, vormgeven, indexeren, enzovoort.
scipy
- SciPy is bovenop de NumPy ingebouwd
- SciPy-module in Python is een volledig functionele versie van lineaire algebra, terwijl Numpy slechts een paar functies bevat.
- De meeste nieuwe Data Science-functies zijn beschikbaar in Scipy in plaats van Numpy.
SciPy – Installatie en omgevingsinstellingen
U kunt SciPy ook installeren Windows via pip
Python3 -m pip install --user numpy scipy
Installeer Scipy op Linux
sudo apt-get install python-scipy python-numpy
Installeer SciPy op Mac
sudo port install py35-scipy py35-numpy
Voordat we SciPy gaan leren Python, moet u de basisfunctionaliteit kennen, evenals verschillende typen van een reeks NumPy
De standaardmanier om SciPy-modules en Numpy te importeren:
from scipy import special #same for other modules import numpy as np
Bestandsinvoer / uitvoerpakket
Scipy, I/O-pakket, heeft een breed scala aan functies voor het werken met verschillende bestandsformaten, waaronder Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV en binair formaat.
Laten we één bestandsformaat nemen Python SciPy-voorbeeld zoals regelmatig gebruikt in 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.]])
Code Uitleg
- Lijn 1 & 2: Importeer de essentiële SciPy-bibliotheek in Python met I/O-pakket en Numpy.
- Lijn 3: Creëer een 4 x 4, dimensionale array
- Lijn 4: Array opslaan in voorbeeld.mat bestand.
- Regel 5: Gegevens ophalen van voorbeeld.mat filet
- Lijn 6: Afdrukuitvoer.
Speciaal functiepakket
- pittig.speciaal pakket bevat talrijke functies van de wiskundige natuurkunde.
- De speciale functie van SciPy omvat Kubieke Wortel, Exponentieel, Logsom Exponentieel, Lambert, Permutatie en Combinaties, Gamma, Bessel, hypergeometrisch, Kelvin, bèta, parabolische cilinder, Relatieve fout exponentieel, enz.
- Voor een beschrijving van al deze functies in één regel, typt u Python troosten:
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.
Kubieke wortelfunctie
De functie Kubieke Wortel vindt de derdemachtswortel van waarden.
Syntax:
scipy.special.cbrt(x)
Voorbeeld:
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: matrix([3., 4.])
Exponentiële functie:
De exponentiële functie berekent de 10**x elementgewijs.
Voorbeeld:
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]
Permutaties & Combinaties
SciPy biedt ook functionaliteit om permutaties en combinaties te berekenen.
combinaties – scipy.special.comb(N,k)
Voorbeeld:
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
Permutaties –
scipy.special.perm(N,k)
Voorbeeld:
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 exponentiële functie
Log Sum Exponentieel berekent de log van het som exponentiële invoerelement.
Syntaxis :
scipy.special.logsumexp(x)
Bessel-functie
N-de berekeningsfunctie voor gehele getallen
Syntaxis :
scipy.special.jn()
Lineaire algebra met SciPy
- Lineaire algebra van SciPy is een implementatie van BLAS- en ATLAS LAPACK-bibliotheken.
- De prestaties van lineaire algebra zijn erg snel vergeleken met BLAS en LAPACK.
- Lineaire algebra-routine accepteert tweedimensionale array-objecten en de uitvoer is ook een tweedimensionale array.
Laten we nu eens een test doen scipy.linalg,
Berekenen bepalend van een tweedimensionale 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
Inverse matrix –
scipy.linalg.inv()
Inverse Matrix van Scipy berekent de inverse van elke vierkante matrix.
Laten we zien,
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]] )
Eigenwaarden en Eigenvector
scipy.linalg.eig()
- Het meest voorkomende probleem in de lineaire algebra zijn eigenwaarden en eigenvector, die eenvoudig kunnen worden opgelost met behulp van eig()functie.
- Laten we nu de eigenwaarde van (X) en corresponderende eigenvector van een tweedimensionale vierkante matrix.
Voorbeeld
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] ]
Discrete Fourier-transformatie – scipy.fftpack
- DFT is een wiskundige techniek die wordt gebruikt bij het omzetten van ruimtelijke gegevens in frequentiegegevens.
- FFT (Fast Fourier Transformation) is een algoritme voor het berekenen van DFT
- FFT wordt toegepast op een multidimensionale array.
- Frequentie definieert het aantal signalen of golflengten in een bepaalde tijdsperiode.
Voorbeeld: Neem een golf en laat zien met behulp van de Matplotlib-bibliotheek. we nemen een eenvoudig periodiek functievoorbeeld van 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:
Je kunt dit zien. De frequentie is 5 Hz en het signaal wordt herhaald in 1/5 seconde – dit wordt een bepaalde tijdsperiode genoemd.
Laten we nu deze sinusoïde golf gebruiken met behulp van DFT-applicatie.
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:
- Je kunt duidelijk zien dat de uitvoer een eendimensionale array is.
- Invoer met complexe waarden is nul, behalve twee punten.
- In het DFT-voorbeeld visualiseren we de grootte van het signaal.
Optimalisatie en pasvorm in SciPy – scipy.optimize
- Optimalisatie biedt een nuttig algoritme voor het minimaliseren van curve-fitting, multidimensionale of scalaire en root-fitting.
- Laten we een voorbeeld nemen van een scalaire functie,om de minimale scalaire functie te vinden.
%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:
De optimalisatie is succesvol beëindigd.
Huidige functiewaarde: -23.241676
Iteraties: 4
Functiebeoordelingen: 18
Gradiëntevaluaties: 6
array([-1.67096375])
- In dit voorbeeld wordt de optimalisatie uitgevoerd met behulp van het gradiëntafdalingsalgoritme vanaf het beginpunt
- Maar het mogelijke probleem zijn lokale minima in plaats van mondiale minima. Als we geen buur van globale minima vinden, moeten we globale optimalisatie toepassen en de globale minima-functie vinden die wordt gebruikt als bassinhoppen() die lokale optimalisatie combineert.
optimize.basinhopping(functie, 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:
- Het Nelder-Mead-algoritme selecteert via de methodeparameter.
- Het biedt de meest eenvoudige manier om te minimaliseren voor een eerlijk gedrag.
- Het Nelder – Mead-algoritme wordt niet gebruikt voor gradiëntevaluaties omdat het langer kan duren om de oplossing te vinden.
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])
Beeldverwerking met SciPy – scipy.ndimage
- scipy.ndimage is een submodule van SciPy die vooral wordt gebruikt voor het uitvoeren van een afbeeldingsgerelateerde bewerking
- ndimage betekent het “n”-dimensionale beeld.
- SciPy Image Processing biedt geometrische transformatie (roteren, bijsnijden, spiegelen), beeldfiltering (scherp en scherp), weergavebeeld, beeldsegmentatie, classificatie en extractie van functies.
- MISC-pakket in SciPy bevat vooraf gebouwde afbeeldingen die kunnen worden gebruikt om beeldmanipulatietaken uit te voeren
Voorbeeld: Laten we een voorbeeld van een geometrische transformatie van afbeeldingen nemen
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 we Naar beneden klappen huidige afbeelding:
#Flip Down using scipy misc.face image flip_down = np.flipud(misc.face()) plt.imshow(flip_down) plt.show()
Output:
Voorbeeld: Rotatie van afbeelding met 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:
Integratie met Scipy – Numerieke integratie
- Wanneer we een functie integreren waarbij analytische integratie niet mogelijk is, moeten we ons wenden tot numerieke integratie
- SciPy biedt functionaliteit om functies te integreren met numerieke integratie.
- scipy.integreren De bibliotheek heeft enkele integratie, dubbele, driedubbele, meervoudige, Gaussische kwadraten, Romberg-, trapezium- en Simpson-regels.
Voorbeeld: Neem nu een voorbeeld van Enkele integratie
Here a is de bovengrens en b is de ondergrens
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)
Hier retourneert de functie twee waarden, waarbij de eerste waarde integratie is en de tweede waarde de geschatte fout in integraal.
Voorbeeld: Neem nu een SciPy-voorbeeld van dubbele integratie. We vinden de dubbele integratie van de volgende vergelijking,
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)
Je hebt die bovenstaande uitvoer gezien als dezelfde vorige.
Samenvatting
- SciPy (uitgesproken als "Zucht Pi") is een open source Python-gebaseerde bibliotheek, die wordt gebruikt in wiskunde, wetenschappelijk computergebruik, techniek en technisch computergebruik.
- SciPy bevat verschillende subpakketten die helpen bij het oplossen van de meest voorkomende problemen met betrekking tot wetenschappelijke berekeningen.
- SciPy is bovenop de NumPy ingebouwd
Pakketnaam | Beschrijving |
---|---|
scipy.io | Bestandsinvoer/-uitvoer |
pittig.speciaal | Speciale functie |
scipy.linalg | Lineaire algebra Operatie |
scipy.interpoleren | interpolatie |
scipy.optimize | Optimalisatie en pasvorm |
pittige.statistieken | Statistieken en willekeurige getallen |
scipy.integreren | Numerieke integratie |
scipy.fftpack | Snelle Fourier-transformaties |
scipy.signaal | Signal In behandeling |
scipy.ndimage | Beeldmanipulatie – |