Kot SciPy je odprtokodna, ima zelo aktivno in živahno skupnost razvijalcev, zaradi česar je s SciPyjem na voljo ogromno modulov za ogromno znanstvenih aplikacij in izračunov. Nekatere zapletene matematične operacije, ki jih je mogoče izvesti s programom SciPy, so:
- Interpolacija
- Integracija
- Optimizacija
- Obdelava slik
- Statistika
- Izračuni posebnih funkcij itd.
SciPy lahko primerjamo z večino ukaznih in standardnih knjižnic, kot sta knjižnica GSL za C ++ in Matlab. Ker je SciPy zgrajen na vrhu paketa NumPy, je mogoče ta dva paketa tudi popolnoma integrirati. Če si lahko omislite matematično operacijo, ki jo je treba izvesti, preverite knjižnico SciPy, preden sami implementirate ta modul, saj ima SciPy v večini primerov že vse operacije za vas.
Namestite SciPy knjižnico
Namestite knjižnico SciPy, preden preidemo na dejanske primere in koncepte. Ta paket lahko namestite na dva načina. Prva vključuje uporabo upravitelja paketov Python, pip:
pip namestiteDrugi način se nanaša na Anacondo, paket lahko namestimo kot:
conda install -c anaconda scipyKo je knjižnica nameščena, jo lahko uvozimo kot:
uvozi scipyNazadnje, saj bomo uporabili tudi NumPy (priporočljivo je, da za vse operacije NumPy uporabljamo NumPy neposredno, namesto da bi šli skozi paket SciPy):
uvozi numpyMožno je, da bomo v nekaterih primerih radi tudi izrisali svoje rezultate, za katere bomo uporabili knjižnico Matplotlib. Za to knjižnico izvedite naslednji uvoz:
uvozi matplotlibZa vse primere v tej lekciji bom uporabil upravitelja Anaconde. Za isto bom izdal Jupyter Notebook:
Zdaj, ko smo pripravljeni z vsemi izjavami o uvozu napisati nekaj kode, se začnimo potapljati v paket SciPy z nekaj praktičnimi primeri.
Delo s polinomskimi enačbami
Začeli bomo s pregledom enostavnih polinomskih enačb. Polinomske funkcije lahko v naš program vključimo na dva načina. Lahko izkoristimo poly1d razred, ki uporablja koeficiente ali korenine polinoma za inicializiranje polinoma. Oglejmo si primer:
iz numpy uvoza poly1dfirst_polynomial = poly1d ([3, 4, 7])
tisk (prvi_polinom)
Ko zaženemo ta primer, bomo videli naslednji izhod:
Jasno je, da je polinomska predstavitev enačbe natisnjena kot rezultat, tako da je rezultat dokaj enostaven za razumevanje. Tudi na tem polinumu lahko izvajamo različne operacije, ga kvadratimo, najdemo njegov odvod ali ga celo rešimo za vrednost x. Poskusimo narediti vse to v naslednjem primeru:
print ("Polinomski kvadrat: \ n")tisk (prvi_polinom * prvi_polinom)
print ("Izpeljanka iz polinoma: \ n")
print (prvi_polinom.deriv ())
print ("Reševanje polinoma: \ n")
tisk (first_polynomial (3))
Ko zaženemo ta primer, bomo videli naslednji izhod:
Ko sem razmišljal, da je to vse, kar lahko naredimo s SciPyjem, sem se spomnil, da lahko integriramo tudi polinom. Zaženimo še zadnji primer s polinomi:
print ("Integriranje polinoma: \ n")print (prvi_polinom.integ (1))
Celo število, ki ga prenesemo, pove paketu, kolikokrat naj integrira polinom:
Lahko preprosto prenesemo drugo celo število, ki pove paketu, kolikokrat naj integrira ta polinom.
Reševanje linearnih enačb
Z SciPy je mogoče celo rešiti linearne enačbe in poiskati njihove korenine, če obstajajo. Za reševanje linearnih enačb predstavljamo niz enačb kot matrike NumPy in njihovo rešitev kot ločena polja NumPy. Predstavljajmo si ga na primeru, ko delamo enako in izkoristimo linalg paket za iskanje korenin enačb, tukaj so enačbe, ki jih bomo rešili:
1x + 5y = 63x + 7y = 9
Rešimo zgornje enačbe:
iz scipy uvoza linalgenačba = np.matrika ([[1, 5], [3, 7]])
rešitev = np.matrika ([[6], [9]])
korenine = linalg.rešiti (enačba, rešitev)
print ("Najdemo korenine:")
tisk (korenine)
print ("\ n Dot izdelek mora biti nič, če so rešitve pravilne:")
natis (enačba.pika (korenine) - raztopina)
Ko zaženemo zgornji program, bomo videli, da enačba pikčastega produkta daje nič rezultat, kar pomeni, da so bile korenine, za katere je program ugotovil, pravilne:
Fourierjeve transformacije z SciPy
Fourierjeve transformacije nam pomagajo, da funkcijo izrazimo kot ločene komponente, ki sestavljajo to funkcijo, in nas vodi do tega, kako lahko te komponente rekombiniramo, da dobimo nazaj prvotno funkcijo.
Oglejmo si preprost primer Fourierjevih transformacij, kjer z uporabo knjižnice Matplotlib narišemo vsoto dveh kosinusov:
od scipy.fftpack uvoz# Število vzorčnih točk
N = 500
# razmik med vzorci
T = 1.0/800.0
x = np.Linspace (0.0, N * T, N)
y = np.cos (50.0 * 2.0 * np.pi * x) + 0.5 * np.cos (80.0 * 2.0 * np.pi * x)
yf = fft (y)
xf = np.Linspace (0.0, 1.0 / (2.0 * T), N // 2)
# matplotlib za risanje
uvozi matplotlib.pyplot kot plt
plt.ploskev (xf, 2.0 / N * np.abs (yf [0: N // 2]))
plt.naslov ('Info')
plt.ylabel ('os Y')
plt.xlabel ('os X')
plt.mreža()
plt.pokaži ()
Tu smo začeli z gradnjo vzorčnega prostora in enačbe kosinusa, ki smo jo nato transformirali in narisali. Tu je rezultat zgornjega programa:
To je eden dobrih primerov, ko vidimo, da se SciPy uporablja v zapleteni matematični enačbi za enostavno vizualizacijo stvari.
Vektorji in matrica z SciPy
Zdaj, ko vemo veliko stvari, za katere je sposoben SciPy, smo lahko prepričani, da lahko SciPy deluje tudi z Vectors in Matrix. Matrice so pomemben del linearne algebre, saj matrice uporabljamo tudi za predstavitev vektorskih preslikav.
Tako kot smo gledali na reševanje linearnih enačb s SciPy, lahko tudi vektorje predstavljamo z np.matrika () funkcije. Začnimo z gradnjo matrike:
my_matrix = np.matrika (np.naključen.naključno ((3, 3)))tiskanje (my_matrix)
Tu je rezultat zgornjega delčka:
Kadar koli govorimo o matricah, vedno govorimo o lastnih vrednostih in lastnih vektorjih. Preprosto povedano, lastni vektorji so vektorji, ki pomnoženi z matrico ne spremenijo svoje smeri, v nasprotju z večino vektorjev. To pomeni, da tudi če pomnožite lastne vektorje z matrico, obstaja vrednost (ali lastna vrednost), ki je eden od dejavnikov množenja. To pomeni:
Ax = λx.V zgornji enačbi je A matrika, λ lastna vrednost in x vektor. Zapišemo preprost delček kode, da poiščemo lastne vrednosti za dani vektor:
la, vektor = linalg.eig (my_matrix)tisk (vektor [:, 0])
tisk (vektor [:, 1])
tisk (linalg.eigvals (my_matrix))
Ko zaženemo ta primer, bomo videli naslednji izhod:
Determinant za izračun matrike
Naslednja operacija, ki jo bomo izvedli s SciPy, je izračun determinant dvodimenzionalne matrike. Ponovno bomo uporabili matrico, ki smo jo uporabili v zadnjem delčku kode tukaj:
linalg.det (my_matrix)Ko zaženemo ta primer, bomo videli naslednji izhod:
Zaključek
V tej lekciji smo si ogledali veliko dobrih primerov, ko nam lahko SciPy pomaga z izvedbo zapletenih matematičnih izračunov za nas z enostavnim API-jem in paketi.