SciPy-zelfstudie: wat is Python SciPy en hoe te gebruiken?



SciPy is een Python-bibliotheek die wordt gebruikt om wetenschappelijke en wiskundige problemen op te lossen. NumPy versus SciPy. Basic, Special, Integration, Optimization, etc met voorbeelden.

Wiskunde behandelt een groot aantal concepten die erg belangrijk zijn, maar tegelijkertijd complex en tijdrovend. Echter, biedt de volwaardige SciPy-bibliotheek die dit probleem voor ons oplost. In deze SciPy-zelfstudie leert u hoe u deze bibliotheek kunt gebruiken, samen met enkele functies en hun voorbeelden.

Bekijk voordat u verder gaat alle onderwerpen die in dit artikel worden besproken:





Dus laten we beginnen. :)

thread synchronisatie in java-voorbeeld

Wat is SciPy?

SciPy is een open-source Python-bibliotheek die wordt gebruikt om wetenschappelijke en wiskundige problemen op te lossen. Het is gebouwd op de extensie en stelt de gebruiker in staat om gegevens te manipuleren en te visualiseren met een breed scala aan commando's op hoog niveau. Zoals eerder vermeld, bouwt SciPy op NumPy en daarom is het niet nodig om NumPy te importeren als u SciPy importeert.



NumPy versus SciPy

Zowel NumPy als SciPy zijn gebruikt voor gebruikte wiskundige en numerieke analyse. NumPy bevat array-gegevens en basisbewerkingen zoals sorteren, indexeren, enz. Terwijl SciPy bestaat uit alle numerieke code. Hoewel NumPy een aantal van die kan helpen bij het oplossen van lineaire algebra, Fourier-transformaties, enz. SciPy is de bibliotheek die feitelijk volledig functionele versies van deze functies bevat, samen met vele andere. Als u echter wetenschappelijke analyses uitvoert met Python, moet u zowel NumPy als SciPy installeren, aangezien SciPy voortbouwt op NumPy.

Subpakketten in SciPy:

SciPy heeft een aantal subpakketten voor verschillende wetenschappelijke berekeningen die in de volgende tabel worden weergegeven:

NaamOmschrijving
TROSClustering algoritmen
constantenFysieke en wiskundige constanten
fftpackRoutines voor snelle Fourier-transformatie
integrerenIntegratie en gewone differentiaalvergelijkingsoplossers
interpolerenInterpolatie en vloeiende splines
ikInput en output
linalgLineaire algebra
ik vliegN-dimensionale beeldverwerking
odrOrthogonale afstandsregressie
optimaliserenOptimalisatie en routines voor het vinden van wortels
signaalSignaalverwerking
schaarsSchaarse matrices en bijbehorende routines
ruimtelijkRuimtelijke datastructuren en algoritmen
speciaalSpeciale functies
statistiekenStatistische verdelingen en functies

Voor een gedetailleerde beschrijving kunt u echter de officiële documentatie .



Deze pakketten moeten exclusief worden geïmporteerd voordat ze worden gebruikt. Bijvoorbeeld:

van scipy import cluster

Laten we, voordat we elk van deze functies in detail bekijken, eerst de functies bekijken die zowel in NumPy als SciPy voorkomen.

Basisfuncties:

Interactie met NumPy:

SciPy bouwt voort op NumPy en daarom kun je de NumPy-functies zelf gebruiken om arrays te verwerken. Om diepgaand over deze functies te weten, kunt u eenvoudig gebruik maken van de functies help (), info () of source ().

helpen():

Om informatie over een functie te krijgen, kunt u gebruik maken van de helpen() functie. Er zijn twee manieren waarop deze functie kan worden gebruikt:

  • zonder enige parameters
  • met behulp van parameters

Hier is een voorbeeld dat beide bovenstaande methoden laat zien:

van scipy import cluster help (cluster) #with parameter help () #without parameter

Wanneer u de bovenstaande code uitvoert, geeft de eerste help () de informatie over de TROS submodule. De tweede help () vraagt ​​de gebruiker om de naam in te voeren van een module, trefwoord, enz. Waarvoor de gebruiker informatie wil zoeken. Om de uitvoering van deze functie te stoppen, typ je simpelweg ‘quit’ en druk je op enter.

info ():

Deze functie retourneert informatie over het gewenste , modules, enz.

scipy.info (cluster)

bron():

De broncode wordt alleen geretourneerd voor objecten die zijn geschreven in . Deze functie geeft geen bruikbare informatie als de methoden of objecten in een andere taal zijn geschreven, zoals C. Als u echter gebruik wilt maken van deze functie, kunt u dit als volgt doen:

scipy.source (cluster)

Speciale functies:

SciPy biedt een aantal speciale functies die worden gebruikt in de wiskundige natuurkunde, zoals elliptisch, gemaksfuncties, gamma, bèta, etc.Om alle functies te zoeken, kunt u gebruik maken van de help () functie zoals eerder beschreven.

Exponentiële en trigonometrische functies:

Het speciale functiepakket van SciPy biedt een aantal functies waarmee u exponenten kunt vinden en trigonometrische problemen kunt oplossen.

Beschouw het volgende voorbeeld:

VOORBEELD:

van scipy import special a = special.exp10 (3) print (a) b = special.exp2 (3) print (b) c = special.sindg (90) print (c) d = special.cosdg (45) print ( d)

UITGANG:

1000,0
8.0
1.0
0,7071067811865475

Er zijn veel andere functies aanwezig in het speciale functiespakket van SciPy die u zelf kunt uitproberen.

Integratiefuncties:

SciPy biedt een aantal functies om integralen op te lossen. Van gewone differentiële integrator tot het gebruik van trapezoïdale regels om integralen te berekenen, SciPy is een opslagplaats van functies om alle soorten integrale problemen op te lossen.

Algemene integratie:

SiPy biedt een functie met de naam quad om de integraal te berekenen van een functie die één variabele heeft. De grenzen kunnen zijn ± & oneindig(± inf) om oneindige limieten aan te geven. De syntaxis van de quad () -functie is als volgt:

SYNTAXIS:

quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, points = None, weight = None, wvar = None, wopts = None , maxp1 = 50, limlst = 50)

Hier wordt de functie geïntegreerd tussen de limieten a en b (kan ook oneindig zijn).

VOORBEELD:

van scipy import speciaal van scipy import integreer a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)

In het bovenstaande voorbeeld wordt de functie ‘a’ geëvalueerd tussen de limieten 0, 1. Wanneer deze code wordt uitgevoerd, ziet u de volgende uitvoer.

UITGANG:

(3.9086503371292665, 4.3394735994897923e-14)

Dubbele integrale functie:

SciPy biedt dblquad dat kan worden gebruikt om dubbele integralen te berekenen. Een dubbele integraal, zoals velen van ons weten, bestaat uit twee reële variabelen. De functie dblquad () neemt de functie die moet worden geïntegreerd als parameter, samen met 4 andere variabelen die de limieten en de functies definiëren dy en dx.

VOORBEELD:

van scipy import integreren a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integreren.dblquad (a, 0, 2, b, c)

UITGANG:

-1.3333333333333335, 1.4802973661668755e-14)

SciPy biedt verschillende andere functies om drievoudige integralen, n integralen, Romberg-integralen, enz. Te evalueren die u verder in detail kunt onderzoeken. Gebruik de helpfunctie om alle details over de vereiste functies te vinden.

Optimalisatiefuncties:

De scipy.optimize biedt een aantal veelgebruikte optimalisatie-algoritmen die kunnen worden bekeken met behulp van de helpfunctie.

Het bestaat in wezen uit het volgende:

  • Onbeperkte en beperkte minimalisatie van multivariate scalaire functies, d.w.z. minimaliseren (bijv. BFGS, Newton Conjugate Gradient, Nelder_mead simplex, enz.)
  • Globale optimalisatieroutines (bijv. Differentiële_evolutie, dual_annealing, enz.)
  • Minimalisatie van de kleinste kwadraten en aanpassing van de curve (bijv. Least_squares, curve_fit, enz.)
  • Scalaire univariate functies minimizers en root-vinders (bijv. Minimal_scalar en root_scalar)
  • Multivariate oplossingssystemen voor vergelijkingen met behulp van algoritmen zoals hybride Powell, Levenberg-Marquardt.

Rosenbrook-functie:

Rosenbrook-functie ( rosen ) is een testprobleem dat wordt gebruikt voor op hellingen gebaseerde optimalisatie-algoritmen. Het wordt als volgt gedefinieerd in SciPy:

rosen-Scipy tutorial-edurekaVOORBEELD:

import numpy als np uit scipy.optimize import rosen a = 1.2 * np.arange (5) rosen (a)

UITGANG: 7371.0399999999945

Nelder-Mead:

DeNelder–Mead-methode is een numerieke methode die vaak wordt gebruikt om de min / max van een functie in een multidimensionale ruimte te vinden. In het volgende voorbeeld wordt de minimalisatiemethode samen met het Nelder-Mead-algoritme gebruikt.

VOORBEELD:

van scipy import optimaliseren a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimaliseren.minimaliseren (optimaliseren.rosen, a, method = 'Nelder-Mead') b.x

UITGANG: matrix ([0,96570182, 0,93255069, 0,86939478, 0,75497872, 0,56793357])

Interpolatiefuncties:

Op het gebied van numerieke analyse verwijst interpolatie naar het construeren van nieuwe datapunten binnen een reeks bekende datapunten. De SciPy-bibliotheek bestaat uit een subpakket met de naam scipy.interpolate dat bestaat uitspline-functies en klassen, eendimensionale en multidimensionale (univariate en multivariate) interpolatieklassen, enz.

Univariate interpolatie:

Univariate interpolatie is in feite een gebied van curve-fitting dievindt de curve die exact past bij een reeks tweedimensionale gegevenspunten. SciPy biedt interp1d functie die kan worden gebruikt om univariate interpolatie te produceren.

VOORBEELD:

importeer matplotlib.pyplot als plt uit scipy importeer interpoleren x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # gebruik interpolatiefunctie geretourneerd door `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()

UITGANG:

Multivariate interpolatie:

Multivariate interpolatie(ruimtelijkinterpolatie) is een soortinterpolatieop functies die uit meer dan één variabelen bestaan. In het volgende voorbeeld ziet u een voorbeeld van de interp2d functie.
Interpoleren over een 2D-raster met behulp van de functie interp2d (x, y, z) zal in feite x, y, z-arrays gebruiken om een ​​bepaalde functie te benaderen f: 'z = f (x, y)' en geeft een functie terug waarvan de aanroepmethode gebruikmaakt spline-interpolatie om de waarde van nieuwe punten te vinden.
VOORBEELD:

van scipy import interpoleer import matplotlib.pyplot als plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpoleren.interp2d (x, y, z, soort = 'kubiek') x2 = np.bereik (2,8) y2 = np.bereik (15,20) z2 = f (xnieuw, ynieuw) plt. plot (x, z [0,:], 'ro-', x2, z2 [0,:], '-') plt.show ()

UITGANG:

Functies van Fourier-transformatie:

Fourier-analyse is een methode die zich bezighoudt met het uitdrukken van een functie als een som van periodieke componenten en het terugwinnen van het signaal van die componenten. De fft functies kunnen worden gebruikt om dediscrete Fourier-transformatie van een reële of complexe reeks.

VOORBEELD:

van scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = fft (x) print (y)

UITGANG: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]

Evenzo kunt u het omgekeerde hiervan vinden door de ifft functioneren als volgt:

VOORBEELD:

rom scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = ifft (x) print (y)

UITGANG: [1.5 + 0.j -0.5-0.5j -0.5 + 0.j -0.5 + 0.5j]

Signaalverwerkingsfuncties:

Signaalverwerking behandelthet analyseren, wijzigen en synthetiseren van signalen zoals geluid, afbeeldingen, enz. SciPy biedt enkele functies waarmee u eendimensionale en tweedimensionale gegevens kunt ontwerpen, filteren en interpoleren.

Filteren:

Door een signaal te filteren, verwijder je er in feite ongewenste componenten uit. Om geordende filtering uit te voeren, kunt u gebruik maken van de order_filter functie. Deze functie voert in feite geordende filtering uit op een array. De syntaxis van deze functie is als volgt:

SYNTAXIS:
order_filter (a, domein, rang)

a = N-dimensionale invoerarray

domain = maskerarray met hetzelfde aantal dimensies als 'a'

rank = niet-negatief getal dat elementen uit de lijst selecteert nadat deze is gesorteerd (0 is de kleinste gevolgd door 1 ...)

VOORBEELD:

uit scipy import signaal x = np.arange (35) .reshape (7, 5) domein = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domein, 1))

UITGANG:

[[0 1 2 3 4]
[5 6 7 8 9]
[10 11 12 13 14]
[15 16 17 18 19]
[20 21 22 23 24]
[25 26 27 28 29]
[30 31 32 33 34]]

[[0. 1. 2. 3. 0.]
[5. 6. 7. 8. 3.]
[10. 11. 12. 13. 8.]
[vijftien. 16. 17. 18. 13.]
[twintig. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

wat doet het formaat in python

Golfvormen:

Het scipy.signal-subpakket bevat ook verschillende functies die kunnen worden gebruikt om golfvormen te genereren. Een van die functies is piep . Deze functie is een frequency-swept cosinus generator en de syntaxis is als volgt:

SYNTAXIS:
chirp (t, f0, t1, f1, method = ’lineair’, phi = 0, vertex_zero = True)

waar,

VOORBEELD:

van scipy.signal import chirp, spectrogram import matplotlib.pyplot als plt t = np.linspace (6, 10, 500) w = chirp (t, f0 = 4, f1 = 2, t1 = 5, method = 'lineair') plt.plot (t, w) plt.title ('Linear Chirp') plt.xlabel ('tijd in sec)') plt.show ()

UITGANG:

Lineaire algebra:

Lineaire algebra behandelt lineaire vergelijkingen en hun representaties met behulp van vectorruimten en matrices. SciPy is gebouwd opATLAS LAPACK- en BLAS-bibliotheken en isextreem snel in het oplossen van problemen met betrekking tot lineaire algebra. Naast alle functies van numpy.linalg, biedt scipy.linalg ook een aantal andere geavanceerde functies. Ook als numpy.linalg niet samen metOndersteuning voor ATLAS LAPACK en BLAS, scipy.linalg is sneller dan numpy.linalg.

De inverse van een matrix zoeken:

Wiskundig gezien is de inverse van een matrix Ais de matrixB.zoals datAB = ikwaarikis de identiteitsmatrix die bestaat uit enen langs de hoofddiagonaal aangeduid alsB = A-een. In SciPy kan deze inverse worden verkregen met behulp van de linalg.inv methode.

VOORBEELD:

import numpy als np uit scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) print (B)

UITGANG:

[[-0,6 0,4]
[0,8 -0,2]]

De determinanten vinden:

De waarde die rekenkundig wordt afgeleid uit de coëfficiënten van de matrix, staat bekend als de determinant van een vierkante matrix. In SciPy kan dit worden gedaan met behulp van een functie de die de volgende syntaxis heeft:

SYNTAXIS:
det (a, overwrite_a = False, check_finite = True)
waar,

a: (M, M) Is ​​een vierkante matrix

tostring () methode java

overwrite_a (bool, optioneel): Sta het overschrijven van gegevens in een

check_finite (bool, optioneel): Om te controleren of de invoermatrix alleen uit eindige getallen bestaat

VOORBEELD:

import numpy als np uit scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) print (B)

UITGANG: -5,0

Schaarse eigenwaarden:

Eigenwaarden zijn een specifieke reeks scalairen die zijn gekoppeld aan lineaire vergelijkingen. De ARPACK zorgt ervoor dat je vrij snel eigenwaarden (eigenvectoren) kunt vinden. De volledige functionaliteit van ARPACK zit erin verpakttwee high-level interfaces die scipy.sparse.linalg.eigs en scipy.sparse.linalg.eigsh zijn. eigs. De eigs-interface stelt je in staat de eigenwaarden van reële of complexe niet-symmetrische vierkante matrices te vinden, terwijl de eigsh-interface interfaces bevat voor echt-symmetrische of complex-hermitische matrices.

De eigh functie lost een gegeneraliseerd eigenwaardeprobleem op voor een complexe hermitische of reële symmetrische matrix.

VOORBEELD:

van scipy.linalg import eigh import numpy als np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a, b = eigh (A) print ('Geselecteerde eigenwaarden:', a) print ('Complexe ndarray:', b)

UITGANG:

Geselecteerde eigenwaarden: [-2.53382695 1.66735639 3.69488657 12.17158399]
Complexe ndarray: [[0.69205614 0.5829305 0.25682823 -0.33954321]
[-0,68277875 0,46838936 0,03700454 -0,5595134]
[0.23275694 -0.29164622 -0.72710245 -0.57627139]
[0.02637572 -0.59644441 0.63560361 -0.48945525]]

Ruimtelijke gegevensstructuren en algoritmen:

Ruimtelijke gegevens bestaan ​​in feite uit objecten die zijn opgebouwd uit lijnen, punten, vlakken enz. Het scipy.spatial-pakket van SciPy kanVoronoi-diagrammen, triangulaties, enz. Met behulp van de Qhull-bibliotheek. Het bestaat ook uit KDTree-implementaties voor zoekopdrachten naar het dichtstbijzijnde punt.

Delaunay-triangulaties:

Wiskundig gezien is Delaunay-triangulatie voor een reeks discrete punten in een vlak een triangulatie zodat geen enkel punt in de gegeven reeks punten isbinnen de omgeschreven cirkel van een driehoek.

VOORBEELD:

importeer matplotlib.pyplot als plt uit scipy.spatial import Delaunay points = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (punten) #Delaunay object print (a) print (a.simplices) plt.triplot (points [:, 0], points [:, 1], a.simplices) plt.plot (points [:, 1], points [:, 0], 'o') plt.show ()

UITGANG:

Multidimensionale beeldverwerkingsfuncties:

Beeldverwerking heeft in feite betrekking op het uitvoeren van bewerkingen op een afbeelding om informatie op te halen of om een ​​verbeterde afbeelding van de originele afbeelding te krijgen. Het scipy.ndimage-pakket bestaat uit een aantalbeeldverwerkings- en analysefuncties ontworpen om te werken met arrays van willekeurige dimensionaliteit.

Convolutie en correlatie:

SciPy biedt een aantal functies die correlatie en convolutie van afbeeldingen mogelijk maken.

  • De functie correlate1d kan worden gebruikt om eendimensionale correlatie langs een bepaalde as te berekenen
  • De functie correlaat staat multidimensionale correlatie toe van een gegeven array met de gespecificeerde kernel
  • De functie convolve1d kan worden gebruikt om eendimensionale convolutie langs een bepaalde as te berekenen
  • De functie samenvoegen staat multidimensionale convolutie toe van een gegeven array met de gespecificeerde kernel

VOORBEELD:

import numpy als np uit scipy.ndimage import correlate1d correlate1d ([3,5,1,7,2,6,9,4], gewichten = [1,2])

UITGANG: matrix ([9, 13, 7, 15, 11, 14, 24, 17])

IO-bestand:

Het scipy.io-pakket biedt een aantal functies waarmee u bestanden van verschillende formaten kunt beheren, zoals MATLAB-bestanden, IDL-bestanden, Matrix Market-bestanden, enz.

Om van dit pakket gebruik te kunnen maken, moet u het als volgt importeren:

importeer scipy.io als sio

Voor volledige informatie over het subpakket kunt u het officiële document raadplegen op Bestand IO .

Dit brengt ons bij het einde van deze SciPy Tutorial. Ik hoop dat je alles duidelijk hebt begrepen. Zorg ervoor dat je zoveel mogelijk oefent .

Heeft u een vraag voor ons? Vermeld het in het commentaargedeelte van deze “SciPy Tutorial” -blog en we nemen zo snel mogelijk contact met u op.

Om diepgaande kennis op te doen over Python en de verschillende applicaties, kunt u zich live inschrijven met 24/7 ondersteuning en levenslange toegang.