SciPy õpetus: mis on Python SciPy ja kuidas seda kasutada?

SciPy on Pythoni teek, mida kasutatakse teaduslike ja matemaatiliste probleemide lahendamiseks. NumPy vs SciPy. Basic, Special, Integration, Optimization jne koos näidetega.

Matemaatika tegeleb tohutu hulga mõistetega, mis on väga olulised, kuid samas keerukad ja aeganõudvad. Kuid, pakub täieõiguslikku SciPy teeki, mis selle probleemi meie jaoks lahendab. Selles SciPy õpetuses saate teada, kuidas seda teeki koos mõne funktsiooni ja nende näidetega kasutada.



Enne jätkamist vaadake kõiki selles artiklis käsitletud teemasid:



Nii et alustame. :)

Mis on SciPy?

SciPy on avatud lähtekoodiga Pythoni teek, mida kasutatakse teaduslike ja matemaatiliste probleemide lahendamiseks. See on ehitatud laiendus ja võimaldab kasutajal andmeid manipuleerida ja visualiseerida laia valiku kõrgetasemeliste käskudega. Nagu varem mainitud, tugineb SciPy NumPy-le ja seetõttu pole SciPy importimisel vaja NumPyt importida.



NumPy vs SciPy

Nii NumPy kui ka SciPy on kasutatud matemaatilise ja numbrilise analüüsi jaoks. NumPy sisaldab massiivi andmeid ja põhitoiminguid, nagu sortimine, indekseerimine jne, samas kui SciPy koosneb kõigist numbrikoodidest. Kuigi NumPy pakub mitmeid mis aitab lahendada lineaarset algebrat, Fourieri teisendusi jne., SciPy on raamatukogu, mis sisaldab tegelikult paljude nende funktsioonide täisfunktsionaalseid versioone. Kui aga teete Pythoni abil teaduslikku analüüsi, peate installima nii NumPy kui ka SciPy, kuna SciPy tugineb NumPy'le.

SciPy alampaketid:

SciPy-l on mitmesugused teaduslikud arvutused, mis on toodud järgmises tabelis:

NimiKirjeldus
klasterKlasterdamise algoritmid
konstandidFüüsikalised ja matemaatilised konstandid
fftpackKiire Fourieri teisendamise rutiin
integreerumaIntegreerimise ja tavaliste diferentsiaalvõrrandite lahendajad
interpoleerimaInterpoleerimine ja splainide silumine
MinaSisend ja väljund
linalgLineaaralgebra
ma lendanN-mõõtmeline pilditöötlus
odrOrtogonaalne kauguse regressioon
optimeeridaOptimeerimine ja juurte leidmise rutiinid
signaalSignaali töötlemine
hõreHõredad maatriksid ja nendega seotud rutiinid
ruumilineRuumiandmete struktuurid ja algoritmid
erilineErifunktsioonid
statistikaStatistilised jaotused ja funktsioonid

Kuid üksikasjaliku kirjelduse saamiseks võite järgida ametlik dokumentatsioon .



Need pakendid tuleb enne nende kasutamist importida ainult. Näiteks:

scipy import klastrist

Enne nende funktsioonide üksikasjalikku uurimist vaatame kõigepealt funktsioone, mis on levinud nii NumPys kui ka SciPys.

Põhifunktsioonid:

Koostoime NumPy-ga:

SciPy põhineb NumPyl ja seetõttu saate massiivide käsitsemiseks kasutada NumPy funktsioone ise. Nende funktsioonide kohta põhjalikumalt teadmiseks võite kasutada lihtsalt funktsioone help (), info () või source ().

abi ():

Mis tahes funktsiooni kohta teabe saamiseks võite kasutada funktsiooni abi () funktsioon. Seda funktsiooni saab kasutada kahel viisil:

  • ilma parameetriteta
  • parameetrite abil

Siin on näide, mis näitab mõlemat ülaltoodud meetodit:

scipy import klastri abist (klastrist) #parameetriga help () #parameetrita

Kui täidate ülaltoodud koodi, tagastab esimene abi () teabe koodi kohta klaster alamoodul. Teine abi () palub kasutajal sisestada selle mooduli, märksõna vms nimi, mille kohta kasutaja soovib teavet otsida. Selle funktsiooni täitmise peatamiseks sisestage lihtsalt ‘quit’ ja vajutage sisestusklahvi.

info ():

See funktsioon tagastab teabe soovitud kohta , moodulid jne.

scipy.info (klaster)

allikas ():

Lähtekood tagastatakse ainult objektidele, mis on sisse kirjutatud . See funktsioon ei tagasta kasulikku teavet juhul, kui meetodid või objektid on kirjutatud mõnes muus keeles, näiteks C. Kuid juhul, kui soovite seda funktsiooni kasutada, saate seda teha järgmiselt:

scipy.source (klaster)

Erifunktsioonid:

SciPy pakub mitmeid matemaatilises füüsikas kasutatavaid erifunktsioone, näiteks elliptilisi, mugavusfunktsioonid, gamma, beeta jne.Kõigi funktsioonide otsimiseks võite kasutada abi () funktsiooni, nagu eespool kirjeldatud.

Eksponentsiaalsed ja trigonomeetrilised funktsioonid:

SciPy erifunktsioonide pakett pakub mitmeid funktsioone, mille kaudu saate leida eksponente ja lahendada trigonomeetrilisi probleeme.

Vaatleme järgmist näidet:

NÄIDE:

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

VÄLJUND:

qtp ja seleeni vahe

1000,0
8,0
1.0
0,7071067811865475

SciPy erifunktsioonide paketis on palju muid funktsioone, mida saate ise proovida.

Integreerimisfunktsioonid:

SciPy pakub integraalide lahendamiseks mitmeid funktsioone. Alates tavalisest diferentsiaalintegraatorist kuni trapetsikujuliste reeglite kasutamiseni integraalide arvutamiseks on SciPy funktsioonide ladu igat tüüpi integraaliprobleemide lahendamiseks.

Üldine integratsioon:

SiPy pakub funktsiooni nimega quad ühe muutujaga funktsiooni integraali arvutamiseks. Piirid võivad olla ± & lõpmatu(± inf) tähistamaks lõpmatuid piire. Funktsiooni quad () süntaks on järgmine:

SÜNTAKS:

quad (func, a, b, args = (), täielik_väljund = 0, epsabs = 1,49e-08, epsrel = 1,49e-08, piir = 50, punktid = puudub, kaal = pole, wvar = pole, wopts = pole , maxp1 = 50, limlst = 50)

Siin integreeritakse funktsioon piiride a ja b vahele (võib olla ka lõpmatu).

NÄIDE:

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

Ülaltoodud näites hinnatakse funktsiooni ‘a’ piiride 0, 1 vahel. Kui see kood on täidetud, näete järgmist väljundit.

VÄLJUND:

(3.9086503371292665, 4.3394735994897923e-14)

Topelt integreeritud funktsioon:

SciPy pakub dblquad mida saab kasutada topeltintegraalide arvutamiseks. Topeltintegraal, nagu paljud meist teavad, koosneb kahest reaalsest muutujast. Funktsioon dblquad () võtab parameetriks funktsiooni integreerimise koos 4 muu muutujaga, mis määratlevad piirid ja funktsioonid dy ja dx.

NÄIDE:

scipy impordist integreerige a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integreeritav.dblquad (a, 0, 2, b, c)

VÄLJUND:

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

SciPy pakub mitmesuguseid muid funktsioone kolmikintegraalide, n-integraalide, Rombergi integraalide jms hindamiseks, mida saate üksikasjalikumalt uurida. Nõutavate funktsioonide kohta kõigi üksikasjade leidmiseks kasutage abifunktsiooni.

Optimeerimisfunktsioonid:

Scipy.optimize pakub mitmeid tavaliselt kasutatavaid optimeerimisalgoritme, mida saab näha abifunktsiooni abil.

Põhimõtteliselt koosneb see järgmisest:

  • Mitmemõõtmeliste skalaarfunktsioonide sundimatu ja piiratud minimeerimine, s.t. minimeerida (nt BFGS, Newtoni konjugeeritud gradient, Nelder_mead simplex jne)
  • Globaalsed optimeerimisrutiinid (nt diferentsiaalne evolutsioon, kahekordne eraldamine jne)
  • Väikseimate ruutude minimeerimine ja kõvera sobitamine (nt vähimruudud, kõverjooned jne)
  • Skalaarsed ühemuutuja funktsioonide minimeerijad ja juurte leidjad (nt minimeeri_skalaar ja juurskalaar)
  • Mitmemõõtmelised võrrandisüsteemide lahendajad, kasutades selliseid algoritme nagu hübriid Powell, Levenberg-Marquardt.

Rosenbrooki funktsioon:

Rosenbrooki funktsioon ( rosen ) on testprobleem, mida kasutatakse gradientidel põhinevate optimeerimisalgoritmide jaoks. See on rakenduses SciPy määratletud järgmiselt:

rosen-Scipy õpetus-edurekaNÄIDE:

impordi numpy np-st scipy-st. optimeeri impordi rosen a = 1,2 * np.arange (5) rosen (a)

VÄLJUND: 7371.0399999999945

Nelder-Mead:

TheNelder–Mead meetod on numbriline meetod, mida kasutatakse sageli funktsiooni min / max leidmiseks mitmemõõtmelises ruumis. Järgmises näites kasutatakse minimeerimise meetodit koos Nelder-Meadi algoritmiga.

NÄIDE:

alates scipy import optimeeri a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimeeri.minimeeri (optimeeri.rosen, a, meetod = 'Nelder-Mead') b.x

VÄLJUND: massiiv ([0.96570182, 0.93255069, 0.86939478, 0.75497872, 0.56793357])

Interpoleerimise funktsioonid:

Numbrianalüüsi valdkonnas viitab interpolatsioon uute andmepunktide loomisele teadaolevate andmepunktide kogumis. SciPy teek koosneb alampaketist nimega scipy.interpolate, mis koosnebspline funktsioonid ja klassid, ühemõõtmelised ja mitmemõõtmelised (ühemõõtmelised ja mitmemõõtmelised) interpolatsiooniklassid jne.

Ühemõõtmeline interpoleerimine:

Ühemuutujaline interpoleerimine on põhimõtteliselt kõvera sobitamise ala, misleiab kõvera, mis tagab täpse sobivuse kahemõõtmeliste andmepunktide reale. SciPy pakub interp1d funktsioon, mida saab kasutada ühemõõtmelise interpoleerimise saamiseks.

NÄIDE:

import matplotlib.pyplot plt-st scipy-st impordi interpolaat x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # kasutage interpoleerimisfunktsiooni, mille tagastas 'interp1d' plt.plot (x, y, 'o', x1, y1, '-') plt.show ()

VÄLJUND:

Mitmemõõtmeline interpoleerimine:

Mitmemõõtmeline interpoleerimine(ruumilineinterpoleerimine) on omamoodiinterpoleeriminefunktsioonidest, mis koosnevad mitmest muutujast. Järgmine näide illustreerib interp2d funktsioon.
Interpoleerimine 2-D ruudustikus interp2d (x, y, z) funktsiooni abil kasutab mõne funktsiooni ligikaudseks muutmiseks massiive x, y, z f: 'z = f (x, y)' ja tagastab funktsiooni, mille kutsemeetod kasutab spline interpoleerimine uute punktide väärtuse leidmiseks.
NÄIDE:

scipy impordi interpolaadist impordi matplotlib.pyplot kui plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolaat.interp2d (x, y, z, liik = 'kuupmeetri') x2 = np.vahemik (2,8) y2 = np.vahemik (15,20) z2 = f (uus, uus) plt. joonis (x, z [0,:], 'ro-', x2, z2 [0,:], '-') plt.show ()

VÄLJUND:

Fourieri teisendusfunktsioonid:

Fourieri analüüs on meetod, mis käsitleb funktsiooni väljendamist perioodiliste komponentide summana ja nendelt komponentidelt signaali taastamist. The fft funktsioone saab kasutada tagastamiseksreaalse või keerulise jada diskreetne Fourier'i teisendus.

NÄIDE:

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

VÄLJUND: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]

Samamoodi leiate selle pöördväärtuse, kasutades ifft toimivad järgmiselt:

NÄIDE:

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

VÄLJUND: [1,5 + 0,j -0,5-0,5j -0,5 + 0,j -0,5 + 0,5j]

Signaali töötlemise funktsioonid:

Signaalitöötlus tegelebsignaalide, nagu heli, pildid jne, analüüsimine, muutmine ja sünteesimine. SciPy pakub mõningaid funktsioone, mille abil saate kujundada, filtreerida ja interpoleerida ühemõõtmelisi ja kahemõõtmelisi andmeid.

Filtreerimine:

Signaali filtreerimisega eemaldate sellest põhimõtteliselt soovimatud komponendid. Tellitud filtreerimise teostamiseks võite kasutada tellimuse_filter funktsioon. See funktsioon teostab põhiliselt massiivil järjestatud filtreerimist. Selle funktsiooni süntaks on järgmine:

SÜNTAKS:
order_filter (a, domeen, auaste)

a = N-dimensiooniline sisemassiiv

sügav kloonimine ja madal kloonimine javas

domeen = maski massiiv, millel on sama arv mõõtmeid kui 'a'

rank = mitte-negatiivne arv, mis valib loendist elemendid pärast sortimist (0 on väikseim, millele järgneb 1…)

NÄIDE:

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

VÄLJUND:

[[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.]
[viisteist. 16. 17. 18. 13.]
[kakskümmend. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

Lainevormid:

Alampakett scipy.signal koosneb ka erinevatest funktsioonidest, mida saab kasutada lainekujude genereerimiseks. Üks selline funktsioon on siristama . See funktsioon on frekventsiaaliga pühitud koosinusgeneraator ja süntaks on järgmine:

SÜNTAKS:
siristamine (t, f0, t1, f1, meetod = 'sirge', phi = 0, tipu_ null = tõene)

kus

NÄIDE:

scipy.signali impordi sirpimisest, spektrogrammi importimisest matplotlib.pyplot plt t = np.linspace (6, 10, 500) w = chirp (t, f0 = 4, f1 = 2, t1 = 5, meetod = 'sirge') plt.plot (t, w) plt.title ('Linear Chirp') plt.xlabel ('aeg sekundites' ') plt.show ()

VÄLJUND:

Lineaaralgebra:

Lineaaralgebra tegeleb lineaarvõrrandite ja nende esitustega, kasutades vektorruume ja maatriksit. SciPy on üles ehitatudATLAS LAPACK ja BLAS teegid ning onlineaaralgebraga seotud probleemide lahendamisel ülikiire. Lisaks kõigile numpy.linalg-i funktsioonidele pakub scipy.linalg ka mitmeid muid täiustatud funktsioone. Samuti, kui numpy.linalg ei kasutata koosATLAS LAPACK ja BLAS tugi, scipy.linalg on kiirem kui numpy.linalg.

Maatriksi pöördvõrde leidmine:

Matemaatiliselt pöördmaatriks Aon maatriksBselline, etAB = IkusMinaon identsusmaatriks, mis koosneb põhidiagonaalist allpool tähistatunaB = A- üks. SciPy-s saab selle pöördväärtuse, kasutades linalg.inv meetod.

NÄIDE:

impordi numpy np-st scipy-st impordi linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) print (B)

VÄLJUND:

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

Määravate tegurite leidmine:

Maatriksi koefitsientidest aritmeetiliselt tuletatud väärtust nimetatakse ruutmaatriksi determinantiks. SciPy-s saab seda teha funktsiooni abil millel on järgmine süntaks:

SÜNTAKS:
det (a, üle kirjutama_a = Vale, kontroll_määratud = Tõene)
kus

a: (M, M) on ruutmaatriks

mis on java oad

overwrite_a (bool, valikuline): lubage a-s andmete ülekirjutamine

check_finite (bool, valikuline): kontrollimaks, kas sisendmaatriks koosneb ainult lõplikest arvudest

NÄIDE:

impordi numpy np-st scipy-st impordi linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) print (B)

VÄLJUND: -5,0

Hõredad omaväärtused:

Omaväärtused on spetsiifiline skalaaride kogum, mis on seotud lineaarvõrranditega. ARPACK pakub, mis võimaldab üsna kiiresti leida omaväärtusi (omavektorid). ARPACKi täielik funktsionaalsus on pakitudkaks kõrgetasemelist liidest, mis on scipy.sparse.linalg.eigs ja scipy.sparse.linalg.eigsh. eigid. Eigsi liides võimaldab teil leida reaalsete või keerukate mittesümmeetriliste ruudukujuliste maatriksite omaväärtusi, samas kui eigsh-liides sisaldab liideseid reaalsümmeetriliste või kompleks-hermitiitsete maatriksite jaoks.

The kaheksa funktsioon lahendab keerulise Hermiti või reaalse sümmeetrilise maatriksi üldistatud omaväärtuse ülesande.

NÄIDE:

saidilt scipy.linalg importige kaheksa impordi numbrit nimega np A = np.kaar ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a), b = kaheksa (A) print ('Valitud omaväärtused:', a) print ('Kompleksne ndarray:', b)

VÄLJUND:

Valitud omaväärtused: [-2.53382695 1.66735639 3.69488657 12.17158399]
Kompleksne ndarray: [[0,69205614 0,5829305 0,25682823 -0,33954321]
[-0,68277875 0,466838936 0,03700454 -0,5595134]
[0,23275694 -0,29164622 -0,72710245 -0,57627139]
[0.02637572 -0.59644441 0.63560361 -0.48945525]]

Ruumiandmete struktuurid ja algoritmid:

Ruumiandmed koosnevad põhimõtteliselt objektidest, mis koosnevad joontest, punktidest, pindadest jne. SciPy scipy.spatial pakett saab arvutadaQhulli teeki kasutades Voronoi skeemid, triangulatsioonid jne. See koosneb ka KDTree juurutustest lähima naabripunkti päringute jaoks.

Delaunay kolmnurgad:

Matemaatiliselt on Delaunay triangulatsioonid diskreetsete punktide hulga jaoks tasapinnas sellised, et antud punktide kogumis pole ühtegi punktimis tahes kolmnurga ümbermõõdu sees.

NÄIDE:

impordi matplotlib.pyplot plt-st scipy.spatialilt Delaunay punktide import = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (punktid) #Delaunay objekti print (a) print (a.simplices) plt.triplot (points [:, 0], points [:, 1], a.simplices) plt.plot (points [:, 1], points [:, 0], 'o') plt.show ()

VÄLJUND:

Mitmemõõtmelised pilditöötlusfunktsioonid:

Pilditöötlus tegeleb põhimõtteliselt pildiga toimingute tegemisega teabe hankimiseks või originaali täiustatud pildi saamiseks. Pakett scipy.ndimage koosneb mitmestsuvalise mõõtmetega massiividega töötamiseks mõeldud pilditöötlus- ja analüüsifunktsioonid.

Konversioon ja korrelatsioon:

SciPy pakub mitmeid funktsioone, mis võimaldavad piltide korrelatsiooni ja konvolutsiooni.

  • Funktsioon korreleerima1d saab kasutada ühemõõtmelise korrelatsiooni arvutamiseks mööda antud telge
  • Funktsioon korreleeruma võimaldab mis tahes massiivi mitmemõõtmelist korrelatsiooni määratud kerneliga
  • Funktsioon convolve1d saab kasutada ühemõõtmelise konvolutsiooni arvutamiseks mööda antud telge
  • Funktsioon kokku keerama võimaldab mis tahes antud massiivi mitmemõõtmelist ümbersuunamist määratud kerneliga

NÄIDE:

impordi numpy np-st failist scipy.ndimage import correlate1d correlate1d ([3,5,1,7,2,6,9,4], kaal = [1,2])

VÄLJUND: massiiv ([9, 13, 7, 15, 11, 14, 24, 17])

IO-fail:

Pakett scipy.io pakub mitmeid funktsioone, mis aitavad teil hallata erineva formaadiga faile, näiteks MATLAB-faile, IDL-faile, Matrix Market'i faile jne.

Selle paketi kasutamiseks peate selle importima järgmiselt:

importige scipy.io sio-na

Alampakendite kohta leiate täielikku teavet ametlikust dokumendist aadressil Fail IO .

See viib meid selle SciPy õpetuse lõppu. Loodan, et olete kõigest selgelt aru saanud. Harjutage kindlasti nii palju kui võimalik .

Kas teil on meile küsimus? Palun mainige seda selle SciPy õpetuse ajaveebi kommentaaride osas ja võtame teiega ühendust niipea kui võimalik.

Põhjalike teadmiste saamiseks Pythoni ja selle erinevate rakenduste kohta saate registreeruda otseülekandeks 24/7 toe ja ligipääsuga kogu eluks.