Matematika se bavi ogromnim brojem pojmova koji su vrlo važni, ali istodobno složeni i dugotrajni. Međutim, pruža punopravnu SciPy biblioteku koja za nas rješava ovaj problem. U ovom SciPy tutorialu naučit ćete kako koristiti ovu knjižnicu, zajedno s nekoliko funkcija i njihovim primjerima.
Prije nego što krenete dalje, pogledajte sve teme o kojima se govori u ovom članku:
- Što je SciPy?
- NumPy vs SciPy
- Podpaketi u SciPy-u
- Osnovne funkcije
- Posebne funkcije
- Funkcije integracije
- Funkcije optimizacije
- Fourierove funkcije transformacije
- Funkcije obrade signala
- Linearna algebra
- Prorijeđene vlastite vrijednosti
- Strukture i algoritmi prostornih podataka
- Funkcije obrade višedimenzionalne slike
- Datoteka IO
Pa krenimo. :)
Što je SciPy?
SciPy je Python biblioteka s otvorenim izvorom koja se koristi za rješavanje znanstvenih i matematičkih problema. Izgrađena je na proširenje i omogućuje korisniku da manipulira i vizualizira podatke širokim rasponom naredbi visoke razine. Kao što je ranije spomenuto, SciPy se nadovezuje na NumPy, pa ako uvozite SciPy, nema potrebe za uvozom NumPy-a.
NumPy vs SciPy
I NumPy i SciPy jesu koristi se za korištenu matematičku i numeričku analizu. NumPy sadrži podatke niza i osnovne operacije poput sortiranja, indeksiranja itd., Dok se SciPy sastoji od svih numeričkih kodova. Iako NumPy nudi brojne koja može pomoći u rješavanju linearne algebre, Fourierovih transformacija itd., SciPy je knjižnica koja zapravo sadrži potpuno opremljene verzije ovih funkcija, zajedno s mnogim drugima. Međutim, ako radite znanstvenu analizu pomoću Pythona, morat ćete instalirati i NumPy i SciPy budući da se SciPy nadovezuje na NumPy.
Potpaketi u SciPy-u:
SciPy ima niz podpaketa za razne znanstvene proračune koji su prikazani u sljedećoj tablici:
Ime | Opis |
Klastera | Algoritmi klasteriranja |
konstante | Fizičke i matematičke konstante |
fftpack | Rutine brze Fourierove transformacije |
integrirati | Integracije i rješavači običnih diferencijalnih jednadžbi |
interpolirati | Interpolacija i izravnavanje zavoja |
Ja | Ulaz i izlaz |
linalg | Linearna algebra |
ja letim | N-dimenzionalna obrada slike |
odr | Ortogonalna regresija udaljenosti |
optimizirati | Rutine optimizacije i pronalaženja korijena |
signal | Procesiranje signala |
rijetko | Rijetke matrice i pridružene rutine |
prostorni | Strukture i algoritmi prostornih podataka |
posebna | Posebne funkcije |
statistika | Statističke raspodjele i funkcije |
Međutim, za detaljan opis možete slijediti službena dokumentacija .
Ove pakete treba uvesti isključivo prije nego što ih upotrijebite. Na primjer:
iz scipy klastera za uvoz
Prije detaljnog razmatranja svake od ovih funkcija, pogledajmo najprije funkcije koje su uobičajene u NumPyu i SciPyu.
Osnovne funkcije:
Interakcija s NumPy:
SciPy se nadovezuje na NumPy i stoga možete koristiti same funkcije NumPy za rukovanje nizovima. Da biste detaljno znali o tim funkcijama, jednostavno možete koristiti funkcije help (), info () ili source ().
Pomozite():
Da biste dobili informacije o bilo kojoj funkciji, možete koristiti Pomozite() funkcija. Postoje dva načina na koje se ova funkcija može koristiti:
- bez ikakvih parametara
- pomoću parametara
Evo primjera koji prikazuje obje gore navedene metode:
iz scipy import klastera pomoć (klaster) # s parametrom help () # bez parametra
Kada izvršite gornji kod, prva pomoć () vraća informacije o Klastera podmodul. Druga pomoć () traži od korisnika da unese ime bilo kojeg modula, ključne riječi itd. Za koje korisnik želi potražiti informacije. Da biste zaustavili izvršavanje ove funkcije, jednostavno upišite 'quit' i pritisnite enter.
info ():
Ova funkcija vraća informacije o željenom , moduli itd.
scipy.info (klaster)
izvor():
Izvorni se kôd vraća samo za objekte napisane u . Ova funkcija ne vraća korisne informacije u slučaju da su metode ili objekti napisani na bilo kojem drugom jeziku kao što je C. Međutim, u slučaju da želite koristiti ovu funkciju, možete to učiniti na sljedeći način:
scipy.source (klaster)
Posebne funkcije:
SciPy nudi niz posebnih funkcija koje se koriste u matematičkoj fizici, poput eliptike, praktične funkcije, gama, beta itd.Da biste potražili sve funkcije, možete koristiti funkciju help () kako je prethodno opisano.
Eksponencijalne i trigonometrijske funkcije:
SciPy-jev paket posebnih funkcija pruža brojne funkcije putem kojih možete pronaći eksponente i riješiti trigonometrijske probleme.
Razmotrimo sljedeći primjer:
PRIMJER:
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)
IZLAZ:
1000,0
8,0
1.0
0,7071067811865475
U paketu posebnih funkcija SciPy-a prisutne su mnoge druge funkcije koje možete sami isprobati.
Funkcije integracije:
SciPy nudi brojne funkcije za rješavanje integrala. U rasponu od običnog diferencijalnog integratora do korištenja trapezoidnih pravila za izračunavanje integrala, SciPy je skladište funkcija za rješavanje svih vrsta integralskih problema.
Opća integracija:
SiPy pruža funkciju imenovanu četverokut za izračunavanje integrala funkcije koja ima jednu varijablu. Granice mogu biti ± & infin(± inf
) da ukaže na beskonačne granice. Sintaksa funkcije quad () je sljedeća:
SINTAKSA:
quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, bodovi = Nijedan, težina = Nijedan, wvar = Nema, wopts = Nema , maxp1 = 50, limlst = 50)
Ovdje će funkcija biti integrirana između ograničenja a i b (također može biti beskonačna).
PRIMJER:
from scipy import special from scipy import integriraj a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)
U gornjem primjeru funkcija 'a' procjenjuje se između ograničenja 0, 1. Kada se izvrši ovaj kôd, vidjet ćete sljedeći izlaz.
IZLAZ:
c ++ vrsta sortiranja
(3,9086503371292665, 4,3394735994897923e-14)
Dvostruka integralna funkcija:
SciPy pruža dblquad koji se mogu koristiti za izračunavanje dvostrukih integrala. Dvostruki integral, kao što mnogi od nas znaju, sastoji se od dvije stvarne varijable. Funkcija dblquad () uzet će funkciju kao svoj parametar, zajedno s još 4 varijable koje definiraju ograničenja i funkcije dy i dx.
PRIMJER:
iz scipy uvoza integrirajte a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)
IZLAZ:
-1,3333333333333335, 1,4802973661668755e-14)
SciPy nudi razne druge funkcije za procjenu trostrukih integrala, n integrala, Rombergovih integrala, itd. Koje možete detaljnije istražiti. Da biste pronašli sve detalje o potrebnim funkcijama, koristite funkciju pomoći.
Funkcije optimizacije:
Scipy.optimize nudi brojne najčešće korištene algoritme za optimizaciju koji se mogu vidjeti pomoću funkcije pomoći.
U osnovi se sastoji od sljedećeg:
- Neograničena i ograničena minimizacija multivarijantnih skalarnih funkcija, tj minimizirati (npr. BFGS, Newton konjugirani gradijent, Nelder_mead simplex, itd.)
- Rutine globalne optimizacije (npr. Diferencijalna_evolucija, dvostruko žarenje itd.)
- Minimizacija najmanjih kvadrata i prilagođavanje krivulje (npr. Najmanji_kvadrati, krivulja_prikladni, itd.)
- Skalarni univarijatni funkcije minimizatori i pronalazači korijena (npr. Minimize_scalar i root_scalar)
- Rješavači sustava multivarijacijskih jednadžbi pomoću algoritama kao što su hibridni Powell, Levenberg-Marquardt.
Funkcija Rosenbrooka:
Rosenbrookova funkcija ( rosen ) je testni problem koji se koristi za algoritme optimizacije temeljene na gradijentu. U SciPy-u se definira kako slijedi:
PRIMJER:
uvoz numpy kao np sa scipy.optimize uvoz rosen a = 1,2 * np.arange (5) rosen (a)
IZLAZ: 7371.0399999999945
Nelder-Mead:
TheNelder–Mead metoda je numerička metoda koja se često koristi za pronalaženje min / max funkcije u višedimenzionalnom prostoru. U sljedećem primjeru koristi se metoda minimiziranja zajedno s Nelder-Mead algoritmom.
PRIMJER:
iz scipy uvoza optimiziraj a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x
IZLAZ: niz ([0,96570182, 0,93255069, 0,86939478, 0,75497872, 0,56793357])
Funkcije interpolacije:
Na polju numeričke analize, interpolacija se odnosi na izgradnju novih podatkovnih točaka unutar skupa poznatih podatkovnih točaka. Biblioteka SciPy sastoji se od podpaketa nazvanog scipy.interpolate koji se sastoji odspline funkcije i klase, jednodimenzionalne i višedimenzionalne (univarijantne i multivarijatne) interpolacijske klase itd.
Univarijatna interpolacija:
Univarijatna interpolacija je u osnovi područje prilagođavanja krivulje kojepronalazi krivulju koja omogućuje točno uklapanje u niz dvodimenzionalnih točaka podataka. SciPy pruža interp1d funkcija koja se može koristiti za stvaranje jednovarijantne interpolacije.
PRIMJER:
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) # koristi funkciju interpolacije koju vraća `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()
IZLAZ:
Multivarijatna interpolacija:
Multivarijatna interpolacija(prostorniinterpolacija) je vrstainterpolacijana funkcijama koje se sastoje od više varijabli. Sljedeći primjer demonstrira primjer interp2d funkcija.
Interpoliranje preko 2-D mreže pomoću funkcije interp2d (x, y, z) u osnovi će koristiti nizove x, y, z za približavanje neke funkcije f: „z = f (x, y)“ i vraća funkciju čija metoda poziva koristi spline interpolacija kako bi se pronašla vrijednost novih bodova.
PRIMJER:
from 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 = interpolirati.interp2d (x, y, z, kind = 'kubni') 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 ()
IZLAZ:
Fourierove funkcije transformacije:
Fourierova analiza metoda je koja se bavi izražavanjem funkcije kao zbrojem periodičnih komponenata i oporavkom signala iz tih komponenata. The fft funkcije se mogu koristiti za vraćanjediskretna Fourierova transformacija stvarnog ili složenog niza.
PRIMJER:
from scipy.fftpack import fft, ifft x = np.array ([0,1,2,3]) y = fft (x) print (y)
IZLAZ: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]
Slično tome, obrnuto od ovog možete pronaći pomoću ifft funkcioniraju na sljedeći način:
PRIMJER:
rom scipy.fftpack uvoz fft, ifft x = np.array ([0,1,2,3]) y = ifft (x) print (y)
IZLAZ: [1,5 + 0j -0,5-0,5j -0,5 + 0j -0,5 + 0,5j]
Funkcije obrade signala:
Obrada signala se bavianaliziranje, modificiranje i sintetiziranje signala poput zvuka, slika itd. SciPy nudi neke funkcije pomoću kojih možete dizajnirati, filtrirati i interpolirati jednodimenzionalne i dvodimenzionalne podatke.
Filtriranje:
Filtriranjem signala u osnovi uklanjate neželjene komponente s njega. Da biste izvršili naručeno filtriranje, možete koristiti filtar_narudžbe funkcija. Ova funkcija u osnovi izvodi poredano filtriranje na nizu. Sintaksa ove funkcije je sljedeća:
SINTAKSA:
filtar_narudžbe (a, domena, rang)
a = N-dimenzionalni ulazni niz
domena = maska s nizom koji ima jednak broj dimenzija kao `a`
rank = Nenegativan broj koji bira elemente s popisa nakon što je sortiran (0 je najmanji, a slijedi 1 ...)
PRIMJER:
iz scipy signala za uvoz x = np.arange (35) .reshape (7, 5) domain = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domena, 1))
IZLAZ:
[[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.]
[petnaest. 16. 17. 18. 13.]
[dvadeset. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]
Valni oblici:
Podpaket scipy.signal također se sastoji od različitih funkcija koje se mogu koristiti za generiranje valnih oblika. Jedna od takvih funkcija je cvrkut . Ova je funkcija fgeneratorski sinusni sinus sinusnog generatora premješten u sljedeću frekvenciju:
SINTAKSA:
cvrkut (t, f0, t1, f1, metoda = 'linearna', phi = 0, vertex_zero = True)
gdje,
PRIMJER:
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 ('Linearno cvrkutanje') plt.xlabel ('vrijeme u sek.') plt.show ()
IZLAZ:
Linearna algebra:
Linearna algebra bavi se linearnim jednadžbama i njihovim prikazima pomoću vektorskih prostora i matrica. SciPy je izgrađen naATLAS LAPACK i BLAS knjižnice i jestizuzetno brzo u rješavanju problema povezanih s linearnom algebrom. Uz sve funkcije iz numpy.linalg, scipy.linalg nudi i niz drugih naprednih funkcija. Također, ako se numpy.linalg ne koristi zajedno sPodrška za ATLAS LAPACK i BLAS, scipy.linalg je brži od numpy.linalg.
Pronalaženje inverzne matrice:
Matematički, inverzna matrica Aje matricaBtakav daAB = IgdjeJaje identitetska matrica koja se sastoji od onih niz glavnu dijagonalu označenih kaoB = A-jedan. U SciPy-ju se ovaj inverzni rezultat može dobiti pomoću linalg.inv metoda.
PRIMJER:
import numpy as np from scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) print (B)
IZLAZ:
[[-0,6 0,4]
[0,8 -0,2]]
Pronalaženje odrednica:
Vrijednost izvedena aritmetički iz koeficijenata matrice poznata je kao odrednica kvadratne matrice. U SciPyu se to može učiniti pomoću funkcije the koja ima sljedeću sintaksu:
SINTAKSA:
det (a, overwrite_a = False, check_finite = True)
gdje,
a: (M, M) je kvadratna matrica
overwrite_a (bool, neobavezno): Omogući prepisivanje podataka u a
check_finite (bool, neobavezno): Da biste provjerili sastoji li se matrica unosa samo od konačnih brojeva
PRIMJER:
import numpy as np from scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) print (B)
IZLAZ: -5,0
Oskudne vlastite vrijednosti:
Vlastite vrijednosti su određeni skup skalara povezanih s linearnim jednadžbama. ARPACK nudi da vam omogućuju da vrlo brzo pronađete vlastite vrijednosti (vlastite vektore). Kompletna funkcionalnost ARPACK-a spakirana je unutardva sučelja na visokoj razini koja su scipy.sparse.linalg.eigs i scipy.sparse.linalg.eigsh. eigs. Eigs sučelje omogućuje vam pronalazak vlastitih vrijednosti stvarnih ili složenih nesimetričnih kvadratnih matrica, dok eigsh sučelje sadrži sučelja za realno-simetrične ili složeno-hermitijske matrice.
The osam funkcija rješava generalizirani problem vlastite vrijednosti za složenu hermitiansku ili stvarnu simetričnu matricu.
PRIMJER:
iz scipy.linalg import osam import numpy kao np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a, b = osam (A) ispis ('Odabrane vlastite vrijednosti:', a) ispis ('Složeni ndarray:', b)
IZLAZ:
Odabrane vlastite vrijednosti: [-2,53382695 1,66735639 3,69488657 12,17158399]
Kompleksni ndray: [[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 i algoritmi prostornih podataka:
Prostorni podaci u osnovi se sastoje od objekata koji se sastoje od linija, točaka, površina itd. Scipy.spatial paket SciPy može izračunatiVoronoijevi dijagrami, triangulacije, itd. Pomoću Qhull biblioteke. Također se sastoji od implementacija KDTree za upite točke najbližeg susjeda.
Delaunayeva triangulacija:
Matematički, Delaunayeva triangulacija za skup diskretnih točaka u ravnini je triangulacija takva da niti jedna točka u danom skupu točaka nijeunutar opisanog kruga bilo kojeg trokuta.
PRIMJER:
uvezi matplotlib.pyplot kao plt sa scipy.spatial import Delaunay points = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (bodovi) #Delaunay objekt print (a) print (a.simplices) plt.triplot (points [:, 0], points [:, 1], a.simplices) plt.plot (points [:, 1], points [:, 0], 'o') plt.show ()
IZLAZ:
Funkcije višedimenzionalne obrade slike:
Obrada slike u osnovi se bavi izvođenjem operacija na slici radi dohvaćanja podataka ili za dobivanje poboljšane slike od izvorne. Paket scipy.ndimage sastoji se od nizafunkcije obrade i analize slika dizajnirane za rad s nizovima proizvoljne dimenzionalnosti.
Konvolucija i korelacija:
SciPy nudi brojne funkcije koje omogućuju korelaciju i konvoluciju slika.
- Funkcija korelirati1d može se koristiti za izračunavanje jednodimenzionalne korelacije duž zadane osi
- Funkcija korelirati omogućuje višedimenzionalnu korelaciju bilo kojeg datog niza s navedenim jezgrom
- Funkcija saviti1d može se koristiti za izračunavanje jednodimenzionalne konvolucije duž zadane osi
- Funkcija smotati u rolnu omogućuje višedimenzionalnu konvoluciju bilo kojeg datog niza s navedenim jezgrom
PRIMJER:
import numpy as np from scipy.ndimage import correlate1d correlate1d ([3,5,1,7,2,6,9,4], težine = [1,2])
IZLAZ: niz ([9, 13, 7, 15, 11, 14, 24, 17])
IO datoteka:
Paket scipy.io nudi brojne funkcije koje vam pomažu u upravljanju datotekama različitih formata poput MATLAB datoteka, IDL datoteka, Matrix Market datoteka itd.
Da biste koristili ovaj paket, morat ćete ga uvesti na sljedeći način:
uvoz scipy.io kao sio
Cjelovite informacije o podpaketu potražite u službenom dokumentu na Datoteka IO .
Ovo nas dovodi do kraja ovog vodiča za SciPy. Nadam se da ste sve jasno razumjeli. Obavezno vježbajte što više .
Imate pitanje za nas? Molimo vas da ga spominjete u odjeljku za komentare ovog bloga 'SciPy Tutorial' i javit ćemo vam se što je prije moguće.
Da biste stekli detaljno znanje o Pythonu, zajedno s raznim aplikacijama, možete se prijaviti za uživo s 24/7 podrškom i doživotnim pristupom.