Matemātika nodarbojas ar ļoti daudziem jēdzieniem, kas ir ļoti svarīgi, bet vienlaikus sarežģīti un laikietilpīgi. Tomēr nodrošina pilnvērtīgu SciPy bibliotēku, kas mums atrisina šo problēmu. Šajā SciPy apmācībā jūs uzzināsiet, kā izmantot šo bibliotēku, kā arī dažas funkcijas un to piemērus.
Pirms turpināt, apskatiet visas šajā rakstā aplūkotās tēmas:
- Kas ir SciPy?
- NumPy vs SciPy
- Apakšpaketes SciPy
- Pamata funkcijas
- Īpašās funkcijas
- Integrācijas funkcijas
- Optimizācijas funkcijas
- Furjē pārveidošanas funkcijas
- Signālu apstrādes funkcijas
- Lineārā algebra
- Retas īpašvērtības
- Telpisko datu struktūras un algoritmi
- Daudzdimensionālas attēlu apstrādes funkcijas
- Failu IO
Tātad sāksim. :)
Kas ir SciPy?
SciPy ir atvērtā koda Python bibliotēka, ko izmanto zinātnisku un matemātisku problēmu risināšanai. Tas ir veidots uz paplašinājumu un ļauj lietotājam manipulēt un vizualizēt datus ar plašu augsta līmeņa komandu klāstu. Kā minēts iepriekš, SciPy balstās uz NumPy, un tādēļ, ja jūs importējat SciPy, nav nepieciešams importēt NumPy.
NumPy vs SciPy
Gan NumPy, gan SciPy ir izmanto izmantotajai matemātiskajai un skaitliskajai analīzei. NumPy satur masīva datus un pamatdarbības, piemēram, šķirošanu, indeksēšanu utt., Savukārt SciPy sastāv no visa ciparu koda. Lai gan NumPy nodrošina vairākus kas var palīdzēt atrisināt lineāro algebru, Furjē transformācijas utt., SciPy ir bibliotēka, kas faktiski satur visu šo funkciju pilnībā piedāvātās versijas kopā ar daudzām citām. Tomēr, ja veicat zinātnisku analīzi, izmantojot Python, jums būs jāinstalē gan NumPy, gan SciPy, jo SciPy balstās uz NumPy.
Apakšpaketes SciPy:
SciPy ir vairākas apakšpaketes dažādiem zinātniskiem aprēķiniem, kas parādīti šajā tabulā:
Nosaukums | Apraksts |
kopa | Klasterizācijas algoritmi |
konstantes | Fiziskās un matemātiskās konstantes |
fftpack | Ātrās Furjē pārveidošanas rutīnas |
integrēt | Integrācijas un parasto diferenciālo vienādojumu risinātāji |
interpolēt | Interpolācija un splainu izlīdzināšana |
Es | Ievade un izvade |
linalg | Lineārā algebra |
ES lidoju | N-dimensiju attēlu apstrāde |
odr | Ortogonālā attāluma regresija |
optimizēt | Optimizācijas un sakņu atrašanas kārtība |
signāls | Signālu apstrāde |
reti | Retas matricas un ar tām saistītās rutīnas |
telpisks | Telpisko datu struktūras un algoritmi |
īpašs | Īpašās funkcijas |
statistika | Statistikas sadalījums un funkcijas |
Tomēr, lai iegūtu detalizētu aprakstu, varat sekot oficiālā dokumentācija .
Šīs paketes jāimportē tikai pirms to lietošanas. Piemēram:
no scipy importa kopas
Pirms detalizēti aplūkot katru no šīm funkcijām, vispirms apskatīsim funkcijas, kas ir izplatītas gan NumPy, gan SciPy.
Pamata funkcijas:
Mijiedarbība ar NumPy:
SciPy balstās uz NumPy, tāpēc jūs varat izmantot pašas NumPy funkcijas, lai apstrādātu masīvus. Lai padziļināti uzzinātu par šīm funkcijām, varat vienkārši izmantot palīdzības (), informācijas () vai avota () funkcijas.
palīdzība ():
Lai iegūtu informāciju par jebkuru funkciju, varat izmantot palīdzība () funkciju. Šo funkciju var izmantot divos veidos:
- bez parametriem
- izmantojot parametrus
Šeit ir piemērs, kas parāda abas iepriekš minētās metodes:
no scipy importēšanas kopas palīdzības (kopas) #with parametrs help () #without parametrs
Izpildot iepriekš minēto kodu, pirmā palīdzība () atgriež informāciju par kodu kopa apakšmodulis. Otrā palīdzība () prasa lietotājam ievadīt jebkura moduļa, atslēgvārda utt. Nosaukumu, par kuru lietotājs vēlas meklēt informāciju. Lai apturētu šīs funkcijas izpildi, vienkārši ierakstiet ‘quit’ un nospiediet enter.
informācija ():
Šī funkcija atgriež informāciju par vēlamo , moduļi utt.
scipy.info (kopa)
avots ():
Avota kods tiek atgriezts tikai objektiem, kas rakstīti šādā valodā: . Šī funkcija neatgriež noderīgu informāciju, ja metodes vai objekti ir rakstīti kādā citā valodā, piemēram, C. Tomēr, ja vēlaties izmantot šo funkciju, varat to izdarīt šādi:
scipy.source (kopa)
Īpašās funkcijas:
SciPy nodrošina vairākas īpašas funkcijas, kuras tiek izmantotas matemātiskajā fizikā, piemēram, elipses, ērtības funkcijas, gamma, beta utt.Lai meklētu visas funkcijas, varat izmantot palīdzības () funkciju, kā aprakstīts iepriekš.
Eksponenciālās un trigonometriskās funkcijas:
SciPy īpašo funkciju pakete nodrošina vairākas funkcijas, ar kuru palīdzību jūs varat atrast eksponentus un atrisināt trigonometriskās problēmas.
Apsveriet šādu piemēru:
PIEMĒRS:
no scipy import speciālais a = special.exp10 (3) print (a) b = special.exp2 (3) print (b) c = special.sindg (90) print (c) d = special.cosdg (45) print ( d)
REZULTĀTS:
1000,0
8.0
1.0
0.7071067811865475
SciPy īpašo funkciju paketē ir daudzas citas funkcijas, kuras varat izmēģināt pats.
Integrācijas funkcijas:
SciPy nodrošina vairākas funkcijas, lai atrisinātu integrālus. Sākot ar parasto diferenciālo integratoru un beidzot ar trapecveida noteikumu izmantošanu integrālu aprēķināšanai, SciPy ir funkciju krājums visu veidu integrālu problēmu risināšanai.
Vispārējā integrācija:
SiPy nodrošina funkciju ar nosaukumu četrstūris lai aprēķinātu funkcijas integrālu, kuram ir viens mainīgais. Var būt robežas ± & bezgalīgs(± inf
), lai norādītu bezgalīgas robežas. Funkcijas quad () sintakse ir šāda:
Sintakse:
četrstūris (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limits = 50, punkti = nav, svars = nav, wvar = nav, wopts = nav , maxp1 = 50, mazākais = 50)
Šeit funkcija tiks integrēta starp robežām a un b (var būt arī bezgalīga).
PIEMĒRS:
no scipy import īpašs no scipy import integrēt a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)
Iepriekš minētajā piemērā funkcija ‘a’ tiek novērtēta starp robežām 0, 1. Kad šis kods tiks izpildīts, jūs redzēsiet šādu izvadi.
REZULTĀTS:
(3.9086503371292665, 4.3394735994897923e-14)
Divkārša neatņemama funkcija:
SciPy nodrošina dblquad ko var izmantot dubulto integrāļu aprēķināšanai. Dubults integrālis, kā daudzi no mums zina, sastāv no diviem reāliem mainīgajiem. Funkcija dblquad () uzskatīs funkciju par integrētu kā savu parametru kopā ar 4 citiem mainīgajiem, kas nosaka robežas un funkcijas dy un dx.
PIEMĒRS:
c vs c ++ vs java
no scipy import integrēt a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrēt. dblquad (a, 0, 2, b, c)
REZULTĀTS:
-1,3333333333333335, 1,4802973661668755e-14)
SciPy nodrošina dažādas citas funkcijas, lai novērtētu trīskāršus integrāļus, n integrālus, Romberg integrālus utt., Kuras varat detalizētāk izpētīt. Lai atrastu visu informāciju par nepieciešamajām funkcijām, izmantojiet palīdzības funkciju.
Optimizācijas funkcijas:
Scipy.optimize nodrošina vairākus parasti lietotus optimizācijas algoritmus, kurus var redzēt, izmantojot palīdzības funkciju.
Tas būtībā sastāv no sekojošā:
- Neierobežota un ierobežota daudzveidīgo skalāro funkciju minimizēšana, t.i. minimizēt (piemēram, BFGS, Ņūtona konjugāta gradients, Nelder_mead simplex utt.)
- Globālās optimizācijas rutīnas (piem., Diferenciāla_evolūcija, divējāda_izmantošana utt.)
- Vismazāko kvadrātu minimizēšana un līknes pielāgošana (piem., Vismazākie kvadrāti, līknes_fit utt.)
- Skalāru vienveidīgo funkciju minimizētāji un sakņu meklētāji (piemēram, minimize_scalar un root_scalar)
- Vairāku mainīgo vienādojumu sistēmu risinātāji, izmantojot tādus algoritmus kā hibrīds Pauels, Levenbergs-Markvards.
Rosenbrook funkcija:
Rozenbruka funkcija ( rosen ) ir testa problēma, ko izmanto uz gradientu balstītiem optimizācijas algoritmiem. Tas SciPy ir definēts šādi:
PIEMĒRS:
importēt numpy kā np no scipy. optimizēt importa rosen a = 1,2 * np. diapazons (5) rosen (a)
REZULTĀTS: 7371.0399999999945
Nelder-Mead:
TheNelder–Mead metode ir skaitliska metode, ko bieži izmanto, lai atrastu funkcijas min / max daudzdimensionālā telpā. Šajā piemērā minimizācijas metode tiek izmantota kopā ar Nelder-Mead algoritmu.
PIEMĒRS:
no scipy import optimizēt a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x
REZULTĀTS: masīvs ([0.96570182, 0.93255069, 0.86939478, 0.75497872, 0.56793357])
Interpolācijas funkcijas:
Skaitliskās analīzes jomā interpolācija attiecas uz jaunu datu punktu izveidošanu zināmo datu punktu kopumā. SciPy bibliotēka sastāv no apakšpakotnes ar nosaukumu scipy.interpolate, kas sastāv nosplainu funkcijas un klases, viendimensiju un daudzdimensiju (vienveidīgo un daudzveidīgo) interpolācijas klases utt.
Vienmasu interpolācija:
Vienu mainīgo interpolācija būtībā ir līknes pielāgošanās zonaatrod līkni, kas nodrošina precīzu atbilstību divdimensiju datu punktu sērijai. SciPy nodrošina interp1d funkcija, kuru var izmantot, lai izveidotu vienveidīgo interpolāciju.
PIEMĒRS:
importēt matplotlib.pyplot kā plt no scipy importa interpolāta x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # izmantot interpolācijas funkciju, ko atgriež `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()
REZULTĀTS:
Daudzfaktoru interpolācija:
Daudzfaktoru interpolācija(telpiskaisinterpolācija) ir sava veidainterpolācijapar funkcijām, kas sastāv no vairākiem mainīgajiem. Šis piemērs demonstrē interp2d funkciju.
Interpolējot pa 2-D režģi, izmantojot funkciju interp2d (x, y, z), pamatā tiks izmantoti x, y, z masīvi, lai tuvinātu kādu funkciju f: 'z = f (x, y)' un atgriež funkciju, kuras izsaukšanas metode tiek izmantota spline interpolācija lai atrastu jaunu punktu vērtību.
PIEMĒRS:
no scipy importēšanas interpolē importa matplotlib.pyplot kā plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolēt.interp2d (x, y, z, kind = 'kubiskais') 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 ()
REZULTĀTS:
Furjē pārveidošanas funkcijas:
Furjē analīze ir metode, kas nodarbojas ar funkcijas izteikšanu kā periodisko komponentu summu un signāla atgūšanu no šiem komponentiem. The fft funkcijas var izmantot, lai atgrieztureālas vai sarežģītas secības diskrēts Furjē pārveidojums.
PIEMĒRS:
no scipy.fftpack importēt fft, ifft x = np.array ([0,1,2,3]) y = fft (x) print (y)
REZULTĀTS: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]
Līdzīgi jūs varat atrast apgriezto vērtību, izmantojot ifft darbojas šādi:
PIEMĒRS:
rom scipy.fftpack importēt fft, ifft x = np.array ([0,1,2,3]) y = ifft (x) print (y)
REZULTĀTS: [1,5 + 0,j -0,5-0,5j -0,5 + 0,j -0,5 + 0,5j]
Signāla apstrādes funkcijas:
Signālu apstrāde nodarbojas aranalizējot, modificējot un sintezējot tādus signālus kā skaņa, attēli utt. SciPy nodrošina dažas funkcijas, izmantojot kuras jūs varat noformēt, filtrēt un interpolēt viendimensiju un divdimensiju datus.
Filtrēšana:
Filtrējot signālu, jūs būtībā noņemat no tā nevēlamus komponentus. Lai veiktu pasūtītu filtrēšanu, varat izmantot order_filter funkciju. Šī funkcija galvenokārt veic sakārtotu filtrēšanu masīvā. Šīs funkcijas sintakse ir šāda:
Sintakse:
order_filter (a, domēns, rangs)
a = N dimensiju ievades masīvs
domēns = masku masīvs ar tādu pašu izmēru skaitu kā 'a'
rang = Nenegatīvs skaitlis, kas pēc kārtošanas izvēlas elementus no saraksta (0 ir mazākais, kam seko 1…)
ec2 izveidojiet instanci no momentuzņēmuma
PIEMĒRS:
no scipy importa signāla x = np.arange (35) .reshape (7, 5) domain = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domain, 1))
REZULTĀTS:
[[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.]
[piecpadsmit. 16. 17. 18. 13.]
[divdesmit. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]
Viļņu formas:
Apakšpakete scipy.signal sastāv arī no dažādām funkcijām, kuras var izmantot viļņu formu ģenerēšanai. Viena no šādām funkcijām ir čivināt . Šī funkcija ir frekvizīta pārņemts kosinusa ģenerators, un sintakse ir šāda:
Sintakse:
čivināt (t, f0, t1, f1, metode = ‘lineāra’, phi = 0, vertex_zero = True)
kur,
PIEMĒRS:
no scipy.signal importa čivināt, spektrogrammas importēšanas matplotlib.pyplot kā plt t = np.linspace (6, 10, 500) w = chirp (t, f0 = 4, f1 = 2, t1 = 5, method = 'lineārs') plt.plot (t, w) plt.title ('Linear Chirp') plt.xlabel ('laiks sekundēs')) plt.show ()
REZULTĀTS:
Lineārā algebra:
Lineārā algebra nodarbojas ar lineāriem vienādojumiem un to attēlojumiem, izmantojot vektoru atstarpes un matricas. SciPy ir veidotsATLAS LAPACK un BLAS bibliotēkas un irārkārtīgi ātri ar lineāro algebru saistīto problēmu risināšanā. Papildus visām numpy.linalg funkcijām scipy.linalg nodrošina arī vairākas citas uzlabotas funkcijas. Arī tad, ja numpy.linalg netiek izmantots kopā arATLAS LAPACK un BLAS atbalsts, scipy.linalg ir ātrāks nekā numpy.linalg.
Matricas apgrieztā atrašana:
Matemātiski matricas A apgrieztā vērtībair matricaBtāds, kaAB = eskurEsir identitātes matrica, kas sastāv no galvenās diagonāles, kas apzīmēta kāB = A-viens. Programmā SciPy šo apgriezto vērtību var iegūt, izmantojot linalg.inv metodi.
PIEMĒRS:
importēt numuru kā np no scipy importa linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) druka (B)
REZULTĀTS:
[[-0,6 0,4]
[0,8 -0,2]]
Noteicošo faktoru atrašana:
Vērtība, kas aritmētiski iegūta no matricas koeficientiem, ir pazīstama kā kvadrātveida matricas determinants. Programmā SciPy to var izdarīt, izmantojot funkciju kurai ir šāda sintakse:
Sintakse:
det (a, pārrakstīt_a = nepatiess, pārbaudīt_galīgs = patiess)
kur,
a: (M, M) ir kvadrātveida matrica
kas ir virtuālā funkcija java
overwrite_a (bool, pēc izvēles): atļaut pārrakstīt datus a
check_finite (bool, pēc izvēles): lai pārbaudītu, vai ievades matrica sastāv tikai no ierobežotiem skaitļiem
PIEMĒRS:
importēt numuru kā np no scipy importa linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) druka (B)
REZULTĀTS: -5,0
Retas īpašvērtības:
Īpašvērtības ir īpaša skalāru kopa, kas saistīta ar lineāriem vienādojumiem. ARPACK nodrošina, ka jūs varat diezgan ātri atrast īpašvērtības (īpašvektorus). Pilna ARPACK funkcionalitāte ir iesaiņotadivas augsta līmeņa saskarnes, kas ir scipy.sparse.linalg.eigs un scipy.sparse.linalg.eigsh. eigs. Eigs interfeiss ļauj jums atrast reālu vai sarežģītu nesimetrisku kvadrātveida matricu īpašvērtības, savukārt eigsh interfeiss satur saskarnes reāli simetriskām vai sarežģītām hermītiskām matricām.
The astoņi funkcija atrisina vispārinātu īpašvērtības problēmu sarežģītai Hermiti vai reālai simetriskai matricai.
PIEMĒRS:
no scipy.linalg importa astoņi importa numpy kā np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a), b = astoņdesmit (A) druka ('Atlasītās īpašvērtības:', a) druka ('Kompleksā krāsa:', b)
REZULTĀTS:
Atlasītās īpašvērtības: [-2,53382695 1,66735639 3,69488657 12,17158399]
Komplekss 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]]
Telpisko datu struktūras un algoritmi:
Telpiskos datus galvenokārt veido objekti, kas sastāv no līnijām, punktiem, virsmām utt. SciPy scipy.spatial pakete var aprēķinātVoronoi diagrammas, triangulācijas utt., Izmantojot Qhull bibliotēku. Tas sastāv arī no KDTree ieviešanas vaicājumiem par tuvāko kaimiņu.
Delaunay triangulācijas:
Matemātiski Delaunay triangulācijas diskrēto punktu kopai plaknē ir triangulācijas tādas, ka dotajā punktu kopā nav neviena punkta.jebkura trijstūra apļa iekšpusē.
PIEMĒRS:
importēt matplotlib.pyplot kā plt no scipy.spatial importēt Delaunay punktus = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (punkti) #Delaunay objekta drukāšana (a) druka (a.simplices) plt.triplot (punkti [:, 0], punkti [:, 1], a.simplices) plt.plot (punkti [:, 1], punkti [:, 0], 'o') plt.parādīt ()
REZULTĀTS:
Daudzdimensionālas attēlu apstrādes funkcijas:
Attēlu apstrāde galvenokārt attiecas uz darbību veikšanu ar attēlu, lai iegūtu informāciju vai iegūtu uzlabotu attēlu no sākotnējā. Pakete scipy.ndimage sastāv no vairākāmattēlu apstrādes un analīzes funkcijas, kas paredzētas darbam ar patvaļīgas dimensijas masīviem.
Konversija un korelācija:
SciPy nodrošina vairākas funkcijas, kas ļauj korelēt un konvolēt attēlus.
- Funkcija korelēt1d var izmantot, lai aprēķinātu viendimensiju korelāciju pa norādīto asi
- Funkcija korelēt pieļauj daudzdimensionālu jebkura masīva korelāciju ar norādīto kodolu
- Funkcija convolve1d var izmantot, lai aprēķinātu viendimensiju konvekciju gar noteiktu asi
- Funkcija samierināties pieļauj daudzdimensionālu jebkura masīva pārveidošanu ar norādīto kodolu
PIEMĒRS:
importēt numpy kā np no scipy.ndimage importēt correlate1d correlate1d ([3,5,1,7,2,6,9,4], svars = [1,2])
REZULTĀTS: masīvs ([9, 13, 7, 15, 11, 14, 24, 17])
IO fails:
Pakete scipy.io nodrošina vairākas funkcijas, kas palīdz pārvaldīt dažādu formātu failus, piemēram, MATLAB failus, IDL failus, Matrix Market failus utt.
Lai izmantotu šo pakotni, tā būs jāimportē šādi:
importēt scipy.io kā sio
Lai iegūtu pilnīgu informāciju par apakšpakām, varat atsaukties uz oficiālo dokumentu vietnē Failu IO .
Tas mūs noved pie šīs SciPy apmācības beigām. Es ceru, ka jūs visu esat skaidri sapratis. Pārliecinieties, ka praktizējat pēc iespējas vairāk .
Vai mums ir jautājums? Lūdzu, pieminējiet to šī “SciPy Tutorial” emuāra komentāru sadaļā, un mēs sazināsimies ar jums pēc iespējas ātrāk.
Lai iegūtu padziļinātas zināšanas par Python kopā ar dažādām lietojumprogrammām, varat reģistrēties tiešraidē ar diennakts atbalstu un piekļuvi mūža garumā.