Kā SciPy ir atvērtā koda, tai ir ļoti aktīva un dinamiska izstrādātāju kopiena, kuras dēļ ir pieejams milzīgs moduļu skaits, lai SciPy būtu pieejams ļoti daudziem zinātniskiem lietojumiem un aprēķiniem. Dažas no sarežģītajām matemātiskajām operācijām, kuras var veikt ar SciPy, ir:
- Interpolācija
- Integrācija
- Optimizācija
- Attēlu apstrāde
- Statistika
- Īpaši funkciju aprēķini utt.
SciPy var salīdzināt ar lielāko daļu komandu un standarta bibliotēku, piemēram, GSL bibliotēku C ++ un Matlab. Tā kā SciPy ir veidots virs NumPy pakotnes, šīs divas paketes var arī pilnībā integrēt. Ja jūs varat iedomāties kādu matemātisku darbību, kas jāveic, pārliecinieties, vai esat pārbaudījis SciPy bibliotēku, pirms jūs pats ieviešat šo moduli, jo vairumā gadījumu SciPy jau ir pilnībā izpildītas visas jūsu darbības.
Instalējiet SciPy bibliotēku
Instalēsim SciPy bibliotēku, pirms pārejam pie faktiskajiem piemēriem un koncepcijām. Ir divi veidi, kā instalēt šo pakotni. Pirmais ietver Python pakotņu pārvaldnieka, pip izmantošanu:
instalējiet scipyOtrais veids attiecas uz Anaconda, mēs varam instalēt pakotni kā:
conda install -c anakonda scipyKad bibliotēka ir instalēta, mēs varam to importēt kā:
importa scipyVisbeidzot, tā kā mēs izmantosim arī NumPy (visām NumPy darbībām ieteicams izmantot NumPy tieši, nevis iet caur SciPy pakotni):
importa numursIespējams, ka dažos gadījumos mums patiks arī uzzīmēt savus rezultātus, kuriem izmantosim Matplotlib bibliotēku. Veiciet šo bibliotēkas importēšanu šādi:
importa matplotlibEs izmantošu Anaconda vadītāju visiem šīs nodarbības piemēriem. Es palaidīšu Jupyter piezīmju grāmatiņu tam pašam:
Tagad, kad mēs esam gatavi ar visiem importēšanas paziņojumiem uzrakstīt kodu, sāksim ienirt SciPy paketē ar dažiem praktiskiem piemēriem.
Darbs ar polinomu vienādojumiem
Mēs sāksim aplūkot vienkāršus polinomu vienādojumus. Ir divi veidi, kā mēs varam integrēt polinoma funkcijas savā programmā. Mēs varam izmantot poly1d klase, kas polinoma inicializēšanai izmanto koeficientus vai polinoma saknes. Apskatīsim piemēru:
no numpy importa poly1dfirst_polynomial = poly1d ([3, 4, 7])
drukāt (pirmais_polinoms)
Izpildot šo piemēru, mēs redzēsim šādu izvadi:
Skaidrs, ka vienādojuma polinoma attēlojums tiek izdrukāts kā produkcija, lai rezultāts būtu diezgan viegli saprotams. Arī šajā polinomā mēs varam veikt dažādas darbības, piemēram, kvadrātveida, atrast tā atvasinājumu vai pat atrisināt par vērtību x. Mēģināsim visu izdarīt nākamajā piemērā:
drukāt ("Polinoma laukums: \ n")drukāt (pirmais_polinoms * pirmais_polinoms)
drukāt ("Polinoma atvasinājums: \ n")
drukāt (pirmais_polinoms.atvasināt ()
print ("Polinoma atrisināšana: \ n")
drukāt (pirmais_polinoms (3))
Izpildot šo piemēru, mēs redzēsim šādu izvadi:
Tieši tad, kad es domāju, ka tas ir viss, ko mēs varam darīt ar SciPy, es atcerējos, ka mēs varam integrēt arī polinomu. Izpildīsim pēdējo piemēru ar polinomiem:
print ("Polinoma integrēšana: \ n")drukāt (pirmais_polinoms.vesels (1))
Vesels skaitlis, kuru mēs nododam, norāda paketei, cik reizes jāintegrē polinoms:
Mēs varam vienkārši nodot citu veselu skaitli, kas paketei norāda, cik reizes integrēt šo polinomu.
Lineāro vienādojumu risināšana
Ir pat iespējams atrisināt lineārus vienādojumus ar SciPy un atrast to saknes, ja tādas pastāv. Lai atrisinātu lineāros vienādojumus, vienādojumu kopu mēs attēlojam kā NumPy masīvus un to risinājumu kā atsevišķus NumPy masīvus. Vizualizēsim to ar piemēru, kur mēs darām to pašu un izmantojam linalg pakete, lai atrastu vienādojumu saknes, šeit ir vienādojumi, kurus mēs atrisināsim:
1x + 5g = 63x + 7y = 9
Atrisināsim iepriekš minētos vienādojumus:
no scipy importa linalgvienādojums = np.masīvs ([[1, 5], [3, 7]])
risinājums = np.masīvs ([[6], [9]])
saknes = linalg.atrisināt (vienādojums, risinājums)
drukāt ("Atradušas saknes:")
druka (saknes)
print ("\ n Punkta precei jābūt nullei, ja pareizie risinājumi:")
drukāt (vienādojums.punkts (saknes) - šķīdums)
Palaidot iepriekš minēto programmu, mēs redzēsim, ka punktveida produkta vienādojums dod nulles rezultātu, kas nozīmē, ka saknes, kuras atrada programma, bija pareizas:
Furjē transformācijas ar SciPy
Furjē transformācijas palīdz mums izteikt funkciju kā atsevišķus komponentus, kas veido šo funkciju, un mūs iepazīstina ar veidu, kā mēs varam rekombinēt šos komponentus, lai atgūtu sākotnējo funkciju.
Apskatīsim vienkāršu Furjē pārveidojumu piemēru, kur mēs uzzīmējam divu kosinusu summu, izmantojot Matplotlib bibliotēku:
no scipy.fftpack importēt fft# Paraugu punktu skaits
N = 500
# paraugu atstarpes
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 zīmēšanas vajadzībām
importa matplotlib.pyplot kā plt
plt.sižets (xf, 2.0 / N * np.abs (yf [0: N // 2]))
plt.nosaukums (“Informācija”)
plt.ylabel ('Y ass')
plt.xlabel ('X ass')
plt.režģis ()
plt.rādīt ()
Šeit mēs sākām, izveidojot telpas un kosinusa vienādojuma paraugu, kuru pēc tam pārveidojām un uzzīmējām. Šeit ir iepriekš minētās programmas rezultāts:
Šis ir viens no labajiem piemēriem, kad mēs redzam, ka SciPy tiek izmantots sarežģītā matemātiskā vienādojumā, lai viegli vizualizētu lietas.
Vektori un matrica ar SciPy
Tagad, kad mēs zinām daudzas lietas, uz kurām SciPy spēj, mēs varam būt pārliecināti, ka SciPy var strādāt arī ar vektoriem un matricām. Matricas ir svarīga lineārās algebras sastāvdaļa, jo matricas mēs arī izmantojam, lai attēlotu vektoru kartējumus.
Tāpat kā mēs skatījāmies uz lineāro vienādojumu risināšanu ar SciPy, mēs varam attēlot vektorus ar np.masīvs () funkcijas. Sāksim ar matricas izveidošanu:
my_matrix = np.matrica (np.nejaušs.nejaušs ((3, 3)))drukāt (my_matrix)
Šeit ir iepriekš minētā fragmenta izvade:
Ikreiz, kad mēs runājam par matricām, mēs vienmēr runājam par īpašvērtībām un īpašvektoriem. Īsāk sakot, īpašvektori ir vektori, kas, reizinot ar matricu, nemaina to virzienu, pretstatā lielākajai daļai vektoru. Tas nozīmē, ka pat reizinot Eigenvektorus ar matricu, pastāv vērtība (vai īpašvērtība), kas ir viens no reizināšanas faktoriem. Tas nozīmē:
Cirvis = λx.Iepriekšējā vienādojumā A ir matrica, λ ir īpašvērtība un x ir vektors. Uzrakstīsim vienkāršu koda fragmentu, lai atrastu konkrētā vektora īpašvērtības:
la, vektors = linalg.eig (mana_matrica)drukāt (vektors [:, 0])
drukāt (vektors [:, 1])
druka (linalg.eigvals (my_matrix))
Izpildot šo piemēru, mēs redzēsim šādu izvadi:
Aprēķina matricas noteicošais faktors
Nākamā darbība, kuru veiksim ar SciPy, ir divdimensiju matricas determinanta aprēķināšana. Šeit atkārtoti izmantosim matricu, kuru izmantojām pēdējā koda fragmentā:
linalg.det (mana_matrica)Izpildot šo piemēru, mēs redzēsim šādu izvadi:
Secinājums
Šajā nodarbībā mēs apskatījām daudz labu piemēru, kur SciPy var mums palīdzēt, veicot mums sarežģītus matemātiskus aprēķinus ar viegli lietojamu API un pakotnēm.