SciPy Vadnica: Kaj je Python SciPy in kako ga uporabljati?



SciPy je Pythonova knjižnica, ki se uporablja za reševanje znanstvenih in matematičnih problemov. NumPy vs SciPy. Osnovno, posebno, integracija, optimizacija itd. S primeri.

Matematika se ukvarja z ogromno pojmi, ki so zelo pomembni, a hkrati zapleteni in dolgotrajni. Vendar ponuja polnopravno knjižnico SciPy, ki za nas rešuje to težavo. V tej vadnici SciPy se boste naučili, kako uporabljati to knjižnico, skupaj z nekaj funkcijami in njihovimi primeri.

Preden nadaljujete, si oglejte vse teme, obravnavane v tem članku:





Začnimo torej. :)

Kaj je SciPy?

SciPy je odprtokodna knjižnica Python, ki se uporablja za reševanje znanstvenih in matematičnih problemov. Zgrajena je na razširitev in omogoča uporabniku, da manipulira in vizualizira podatke s široko paleto ukazov na visoki ravni. Kot smo že omenili, SciPy gradi na NumPy in zato, če uvozite SciPy, ni treba uvoziti NumPy.



NumPy vs SciPy

NumPy in SciPy sta uporablja se za uporabljeno matematično in numerično analizo. NumPy vsebuje podatke o matriki in osnovne operacije, kot so razvrščanje, indeksiranje itd., Medtem ko je SciPy sestavljen iz vseh številčnih kod. Čeprav NumPy ponuja številne ki lahko pomaga razrešiti linearno algebro, Fourierjeve transformacije itd., SciPy je knjižnica, ki dejansko vsebuje polno predstavljene različice teh funkcij, skupaj s številnimi drugimi. Če pa izvajate znanstveno analizo s pomočjo Pythona, boste morali namestiti NumPy in SciPy, saj SciPy gradi na NumPy.

Podpaketi v SciPy:

SciPy ima številne podpakete za različne znanstvene izračune, ki so prikazani v naslednji tabeli:

ImeOpis
grozdAlgoritmi grozdenja
konstanteFizične in matematične konstante
fftpackRutine hitre Fourierjeve transformacije
integriratiReševalci integracije in navadne diferencialne enačbe
interpoliratiInterpolacija in glajenje zlitin
jazVhod in izhod
linalgLinearna algebra
letimN-dimenzionalna obdelava slik
odrOrtogonalna regresija razdalje
optimizirajteRutine za optimizacijo in iskanje korenov
signalObdelava signalov
redkoRedke matrike in z njimi povezane rutine
prostorskiProstorske podatkovne strukture in algoritmi
posebenPosebne funkcije
statistikaStatistične porazdelitve in funkcije

Za podroben opis pa lahko sledite uradna dokumentacija .



Te pakete je treba uvoziti izključno pred njihovo uporabo. Na primer:

iz scipy uvozne gruče

Preden si podrobno ogledamo vsako od teh funkcij, si najprej oglejmo funkcije, ki so skupne tako v NumPy kot v SciPy.

Osnovne funkcije:

Interakcija z NumPy:

SciPy temelji na NumPy, zato lahko za obdelavo nizov uporabite funkcije NumPy. Če želite poglobljeno vedeti o teh funkcijah, lahko preprosto uporabite funkcije help (), info () ali source ().

pomoč ():

Če želite dobiti informacije o kateri koli funkciji, lahko uporabite pomoč () funkcijo. To funkcijo lahko uporabite na dva načina:

  • brez kakršnih koli parametrov
  • z uporabo parametrov

Tu je primer, ki prikazuje oba zgornja načina:

iz pomoči za gručo scipy import (cluster) #with parameter help () #without parameter

Ko zaženete zgornjo kodo, prva pomoč () vrne informacije o grozd podmodul. Druga pomoč () zahteva, da uporabnik vnese ime katerega koli modula, ključne besede itd., Za katerega želi uporabnik poiskati informacije. Če želite ustaviti izvajanje te funkcije, preprosto vnesite 'quit' in pritisnite Enter.

info ():

Ta funkcija vrne informacije o želenem , moduli itd.

scipy.info (gruča)

vir ():

Izvorna koda se vrne samo za predmete, zapisane v . Ta funkcija ne vrne koristnih informacij, če so metode ali predmeti napisani v katerem koli drugem jeziku, kot je C. Če pa želite uporabiti to funkcijo, lahko to storite na naslednji način:

scipy.source (gruča)

Posebne funkcije:

SciPy ponuja številne posebne funkcije, ki se uporabljajo v matematični fiziki, kot je eliptika, priročne funkcije, gama, beta itd.Za iskanje vseh funkcij lahko uporabite funkcijo help (), kot je opisano prej.

Eksponentne in trigonometrične funkcije:

SciPy-jev paket posebnih funkcij ponuja številne funkcije, s pomočjo katerih lahko najdete eksponente in rešite trigonometrične probleme.

Upoštevajte naslednji primer:

PRIMER:

from 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)

IZHOD:

1000,0
8,0
1.0
0,7071067811865475

V posebnem paketu funkcij SciPy je veliko drugih funkcij, ki jih lahko preizkusite sami.

Funkcije integracije:

SciPy ponuja številne funkcije za reševanje integralov. SciPy je skladišče funkcij za reševanje vseh vrst integralskih problemov, od običajnega diferencialnega integratorja do uporabe trapeznih pravil za izračun integralov.

Splošna integracija:

SiPy ponuja funkcijo z imenom štirikolesnik za izračun integrala funkcije, ki ima eno spremenljivko. Meje so lahko ± & neskončno(± inf), da označite neskončne meje. Sintaksa funkcije quad () je naslednja:

SINTAKSA:

quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, točke = Brez, teža = Brez, wvar = Brez, wopts = Brez , maxp1 = 50, limlst = 50)

Tu bo funkcija integrirana med mejama a in b (lahko tudi neskončno).

print_r v php

PRIMER:

iz scipy import special iz scipy import integriraj a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)

V zgornjem primeru se funkcija 'a' ovrednoti med omejitvami 0, 1. Ko se ta koda izvede, boste videli naslednji izhod.

IZHOD:

(3.9086503371292665, 4.3394735994897923e-14)

Dvojna integrirana funkcija:

SciPy zagotavlja dblquad ki se lahko uporablja za izračun dvojnih integralov. Kot vemo mnogi, je dvojni integral sestavljen iz dveh resničnih spremenljivk. Funkcija dblquad () bo funkcijo integrirala kot svoj parameter skupaj s 4 drugimi spremenljivkami, ki določajo meje in funkcije dy in dx.

PRIMER:

iz scipy uvoza integriraj a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)

IZHOD:

-1,3333333333333335, 1,4802973661668755e-14)

SciPy ponuja različne druge funkcije za ocenjevanje trojnih integralov, n integralov, Rombergovih integralov itd., Ki jih lahko podrobneje raziščete. Če želite najti vse podrobnosti o zahtevanih funkcijah, uporabite funkcijo pomoči.

Optimizacijske funkcije:

Scipy.optimize ponuja številne pogosto uporabljene algoritme za optimizacijo, ki jih lahko vidimo s pomočjo funkcije pomoči.

V bistvu je sestavljen iz naslednjega:

  • Neomejeno in omejeno minimiziranje multivariatnih skalarnih funkcij, tj minimizirati (npr. BFGS, Newton Conjugate Gradient, Nelder_mead simplex itd.)
  • Globalne optimizacijske rutine (npr. Diferencialna_evolucija, dvojno žarjenje itd.)
  • Minimizacija najmanjših kvadratov in prilagajanje krivulje (npr. Najmanjši kvadratki, krivulja_primer itd.)
  • Skalarni enovariacijski funkcije minimizatorji in korenski iskalci (npr. Minimize_scalar in root_scalar)
  • Reševalci multivariatnih enačb z uporabo algoritmov, kot so hibridni Powell, Levenberg-Marquardt.

Funkcija Rosenbrook:

Funkcija Rosenbrook ( rosen ) je testni problem, ki se uporablja za algoritme za optimizacijo na osnovi gradienta. V SciPy je opredeljen na naslednji način:

rosen-Scipy tutorial-edurekaPRIMER:

uvoz numpy kot np iz scipy.optimize uvoz rosen a = 1,2 * np.arange (5) rosen (a)

IZHOD: 7371.0399999999945

Nelder-Mead:

TheNelder–Mead metoda je numerična metoda, ki se pogosto uporablja za iskanje min / max funkcije v večdimenzionalnem prostoru. V naslednjem primeru je uporabljena metoda minimiziranja skupaj z algoritmom Nelder-Mead.

PRIMER:

from scipy import optimize a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x

IZHOD: matrika ([0,96570182, 0,93255069, 0,86939478, 0,75497872, 0,56793357])

Funkcije interpolacije:

Na področju numerične analize se interpolacija nanaša na konstruiranje novih podatkovnih točk znotraj nabora znanih podatkovnih točk. Knjižnica SciPy je sestavljena iz podpaketa z imenom scipy.interpolate, ki je sestavljen izspline funkcije in razredi, enodimenzionalni in večdimenzionalni (univariatni in multivariatni) interpolacijski razredi itd.

Univariatna interpolacija:

Univariatna interpolacija je v bistvu področje prilagajanja krivulje, kinajde krivuljo, ki natančno ustreza seriji dvodimenzionalnih podatkovnih točk. SciPy zagotavlja interp1d funkcija, ki jo lahko uporabimo za izdelavo univariatne interpolacije.

PRIMER:

import matplotlib.pyplot as plt from scipy import interpolate x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # uporabite funkcijo interpolacije, ki jo vrne `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()

IZHOD:

Multivariatna interpolacija:

Multivariatna interpolacija(prostorskiinterpolacija) je neke vrsteinterpolacijaza funkcije, ki so sestavljene iz več spremenljivk. Naslednji primer prikazuje primer datoteke interp2d funkcijo.
Interpolacija preko 2-D mreže z uporabo funkcije interp2d (x, y, z) bo v osnovi uporabila polja x, y, z za približevanje neke funkcije f: 'z = f (x, y)' in vrne funkcijo, katere klicna metoda uporablja zlitinska interpolacija najti vrednost novih točk.
PRIMER:

iz scipy import interpolate import matplotlib.pyplot as plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolate.interp2d (x, y, z, kind = 'kubični') x2 = np.arange (2,8) y2 = np.arange (15,20) z2 = f (xnew, ynew) plt. plot (x, z [0,:], 'ro-', x2, z2 [0,:], '-') plt.show ()

IZHOD:

Funkcije Fourierjeve transformacije:

Fourierjeva analiza je metoda, ki se ukvarja z izražanjem funkcije kot vsoto periodičnih komponent in obnavljanjem signala iz teh komponent. The fft funkcije lahko uporabite za vrnitev datotekediskretna Fourierjeva transformacija resničnega ali kompleksnega zaporedja.

PRIMER:

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

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

kaj naredi bufferedreader v javi

Podobno lahko najdete obratno od tega z uporabo ifft deluje na naslednji način:

PRIMER:

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

IZHOD: [1,5 + 0j -0,5-0,5j -0,5 + 0j -0,5 + 0,5j]

Funkcije obdelave signalov:

Obdelava signalov se ukvarja zanaliziranje, spreminjanje in sintetiziranje signalov, kot so zvok, slike itd. SciPy ponuja nekatere funkcije, s katerimi lahko oblikujete, filtrirate in interpolirate enodimenzionalne in dvodimenzionalne podatke.

Filtriranje:

S filtriranjem signala v bistvu odstranite neželene komponente iz njega. Za izvedbo urejenega filtriranja lahko uporabite filter_naročila funkcijo. Ta funkcija v bistvu izvaja urejeno filtriranje na matriki. Sintaksa te funkcije je naslednja:

SINTAKSA:
filter_naročila (a, domena, uvrstitev)

a = N-dimenzionalno vhodno polje

domena = maska ​​matrika z enakim številom dimenzij kot 'a'

rank = Nenegativno število, ki izbere elemente s seznama po razvrščanju (0 je najmanjše, čemur sledi 1 ...)

PRIMER:

iz scipy uvoznega signala x = np.arange (35) .reshape (7, 5) domain = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domena, 1))

IZHOD:

[[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.]
[petnajst. 16. 17. 18. 13.]
[dvajset. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

Valovne oblike:

Podpaket scipy.signal vsebuje tudi različne funkcije, ki jih je mogoče uporabiti za generiranje valovnih oblik. Ena takih funkcij je žvrgolenje . Ta funkcija je fgenerirani kosinusni generator, sintaksa pa je naslednja:

SINTAKSA:
žvrgolenje (t, f0, t1, f1, metoda = 'linearna', phi = 0, vertex_zero = True)

kje,

PRIMER:

iz scipy.signal import chirp, spektrogram import matplotlib.pyplot as plt t = np.linspace (6, 10, 500) w = chirp (t, f0 = 4, f1 = 2, t1 = 5, method = 'linear') plt.plot (t, w) plt.title ('Linear Chirp') plt.xlabel ('time in sec)') plt.show ()

IZHOD:

Linearna algebra:

Linearna algebra obravnava linearne enačbe in njihove predstavitve z uporabo vektorskih prostorov in matric. SciPy temelji naKnjižnic ATLAS LAPACK in BLAS in jeizjemno hitro pri reševanju problemov, povezanih z linearno algebro. Poleg vseh funkcij iz numpy.linalg, scipy.linalg ponuja tudi številne druge napredne funkcije. Tudi če se numpy.linalg ne uporablja skupaj zPodpora za ATLAS LAPACK in BLAS je scipy.linalg hitrejša od numpy.linalg.

Iskanje inverze matrike:

Matematično je inverzna matrika Aje matrikaBtako daAB = Ikjejazje identitetna matrika, sestavljena iz tistih po glavni diagonali, označenih sB = A-Eno. V SciPy lahko to inverzno dobimo z uporabo linalg.inv metoda.

PRIMER:

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

IZHOD:

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

Iskanje determinant:

Vrednost, aritmetično izpeljana iz koeficientov matrike, je znana kot determinanta kvadratne matrike. V SciPy je to mogoče storiti s pomočjo funkcije ki ima naslednjo sintakso:

SINTAKSA:
det (a, overwrite_a = False, check_finite = True)
kje,

a: (M, M) je kvadratna matrica

sqoop uvoz iz oracle v hdfs

overwrite_a (bool, neobvezno): dovoli prepisovanje podatkov v

check_finite (bool, neobvezno): če želite preveriti, ali je vhodna matrica sestavljena samo iz končnih števil

PRIMER:

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

IZHOD: -5,0

Redke lastne vrednosti:

Lastne vrednosti so poseben sklop skalarjev, povezanih z linearnimi enačbami. ARPACK vam omogoča, da dokaj hitro najdete lastne vrednosti (lastne vektorje). Popolna funkcionalnost ARPACK-a je zapakirana znotrajdva vmesnika na visoki ravni, ki sta scipy.sparse.linalg.eigs in scipy.sparse.linalg.eigsh. eigs. Eigs vmesnik vam omogoča, da poiščete lastne vrednosti realnih ali kompleksnih nesimetričnih kvadratnih matric, medtem ko vmesnik eigsh vsebuje vmesnike za resnično simetrične ali kompleksno-hermitijske matrike.

The osem funkcija rešuje posplošeni problem lastne vrednosti za kompleksno hermitijansko ali realno simetrično matrico.

PRIMER:

iz scipy.linalg uvoz osem uvoz numpy kot np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a, b = osem (A) print ('Izbrane lastne vrednosti:', a) print ('Complex ndarray:', b)

IZHOD:

Izbrane lastne vrednosti: [-2,53382695 1,66735639 3,69488657 12,17158399]
Kompleksna 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]]

Strukture in algoritmi prostorskih podatkov:

Prostorski podatki so v osnovi sestavljeni iz predmetov, ki so sestavljeni iz črt, točk, površin itd. Scipy.spatial paket SciPy lahko izračunaDiagrami Voronoi, triangulacije itd. Z uporabo knjižnice Qhull. Sestavljen je tudi iz implementacij KDTree za poizvedbe točk najbližjega soseda.

Delaunayeve triangulacije:

Matematično je Delaunayeva triangulacija za niz diskretnih točk v ravnini takšna triangulacija, da nobena točka v danem nizu točk niznotraj opisanega kroga katerega koli trikotnika.

PRIMER:

uvozi matplotlib.pyplot kot plt iz scipy.spatial import Delaunay points = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (točke) #Delaunay objekt print (a) print (a.simplices) plt.triplot (točke [:, 0], točke [:, 1], a.simplices) plt.plot (točke [:, 1], točke [:, 0], 'o') plt.show ()

IZHOD:

Večdimenzionalne funkcije obdelave slik:

Obdelava slik se v bistvu ukvarja z izvajanjem operacij na sliki za pridobivanje informacij ali pridobivanje izboljšane slike iz prvotne. Paket scipy.ndimage je sestavljen iz številnihfunkcije obdelave in analize slik, zasnovane za delo z nizi poljubnih dimenzij.

Konvolucija in korelacija:

SciPy ponuja številne funkcije, ki omogočajo korelacijo in zvijanje slik.

  • Funkcija korelat1d se lahko uporablja za izračun enodimenzionalne korelacije vzdolž dane osi
  • Funkcija korelat omogoča večdimenzionalno korelacijo poljubnega polja z določenim jedrom
  • Funkcija zaviti1d se lahko uporablja za izračun enodimenzionalne konvolucije vzdolž dane osi
  • Funkcija zaviti omogoča večdimenzionalno zvijanje poljubnega polja z določenim jedrom

PRIMER:

uvoz numpy kot np iz scipy.ndimage uvoz korelat1d korelat1d ([3,5,1,7,2,6,9,4], uteži = [1,2])

IZHOD: matrika ([9, 13, 7, 15, 11, 14, 24, 17])

IO datoteka:

Paket scipy.io ponuja številne funkcije, ki vam pomagajo pri upravljanju datotek različnih formatov, kot so datoteke MATLAB, datoteke IDL, datoteke Matrix Market itd.

Če želite uporabiti ta paket, ga boste morali uvoziti na naslednji način:

uvozi scipy.io kot sio

Za popolne informacije o podpaketah se lahko obrnete na uradni dokument dne Datoteka IO .

S tem smo prišli do konca te vadnice SciPy. Upam, da ste vse jasno razumeli. Poskrbite, da boste čim več vadili .

Imate vprašanje za nas? Prosimo, omenite ga v oddelku za komentarje tega spletnega dnevnika 'Vodič za SciPy', mi pa se vam bomo javili v najkrajšem možnem času.

Če želite pridobiti poglobljeno znanje o Pythonu skupaj z različnimi aplikacijami, se lahko prijavite v živo s 24-urno podporo in življenjskim dostopom.