Výukový program pre SciPy: Čo je Python SciPy a ako ho používať?



SciPy je knižnica v Pythone používaná na riešenie vedeckých a matematických problémov. NumPy vs SciPy. Základné, Špeciálne, Integrácia, Optimalizácia atď. S príkladmi.

Matematika sa zaoberá obrovským počtom pojmov, ktoré sú veľmi dôležité, ale zároveň zložité a časovo náročné. Avšak poskytuje pre nás plnohodnotnú knižnicu SciPy, ktorá tento problém rieši. V tomto výučbe SciPy sa naučíte využívať túto knižnicu spolu s niekoľkými funkciami a ich príkladmi.

Predtým, ako budete pokračovať, prečítajte si všetky témy diskutované v tomto článku:





Tak poďme na to. :)

Čo je SciPy?

SciPy je open-source knižnica v Pythone, ktorá sa používa na riešenie vedeckých a matematických problémov. Je postavená na rozšírenie a umožňuje používateľovi manipulovať a vizualizovať údaje pomocou širokej škály príkazov na vysokej úrovni. Ako už bolo spomenuté, SciPy stavia na NumPy, a preto ak importujete SciPy, nie je potrebné importovať NumPy.



NumPy vs SciPy

NumPy aj SciPy sú použité pre použitú matematickú a numerickú analýzu. NumPy obsahuje údaje o poli a základné operácie, ako je triedenie, indexovanie atď., Zatiaľ čo SciPy pozostáva zo všetkých číselných kódov. Aj keď NumPy poskytuje množstvo ktoré môžu pomôcť pri riešení lineárnej algebry, Fourierových transformácií atď., SciPy je knižnica, ktorá v skutočnosti obsahuje plnohodnotné verzie týchto funkcií spolu s mnohými ďalšími. Ak však robíte vedecké analýzy pomocou Pythonu, budete si musieť nainštalovať NumPy aj SciPy, pretože SciPy stavia na NumPy.

Podbalenia v SciPy:

SciPy má množstvo čiastkových balíkov pre rôzne vedecké výpočty, ktoré sú uvedené v nasledujúcej tabuľke:

názovPopis
zhlukKlastrové algoritmy
konštantyFyzikálne a matematické konštanty
fftpackRutiny Fourierovej transformácie
integrovaťIntegrácia a riešenie bežných diferenciálnych rovníc
interpolovaťInterpolácia a vyhladenie spline
JaVstup a výstup
linalgLineárna algebra
LietamN-rozmerné spracovanie obrazu
odrOrtogonálna regresia vzdialenosti
optimalizovaťRutiny optimalizácie a hľadania koreňov
signálSpracovanie signálu
riedkyRiedke matice a súvisiace rutiny
priestorovéŠtruktúry a algoritmy priestorových údajov
špeciálneŠpeciálne funkcie
štatistikyŠtatistické rozdelenie a funkcie

Pre podrobný popis však môžete postupovať podľa úradná dokumentácia .



Tieto balíčky je potrebné importovať výlučne pred ich použitím. Napríklad:

zo scipy import klastra

Predtým, ako sa podrobne pozrieme na každú z týchto funkcií, najskôr sa pozrime na funkcie, ktoré sú spoločné pre NumPy aj SciPy.

Základné funkcie:

Interakcia s NumPy:

SciPy stavia na NumPy, a preto môžete na prácu s poľami využívať samotné funkcie NumPy. Ak sa chcete dozvedieť podrobnejšie informácie o týchto funkciách, môžete jednoducho použiť funkcie help (), info () alebo source ().

Pomoc():

Ak chcete získať informácie o akejkoľvek funkcii, môžete použiť Pomoc() funkcie. Existujú dva spôsoby, ako je možné túto funkciu použiť:

  • bez akýchkoľvek parametrov
  • pomocou parametrov

Tu je príklad, ktorý ukazuje obe vyššie uvedené metódy:

z scipy import klastra help (klaster) # s parametrom help () # bez parametra

Po vykonaní vyššie uvedeného kódu prvá pomoc () vráti informácie o zhluk submodul. Druhá pomoc () žiada používateľa, aby zadal názov ľubovoľného modulu, kľúčového slova atď., O ktorom si užívateľ želá vyhľadať informácie. Ak chcete zastaviť vykonávanie tejto funkcie, jednoducho napíšte „quit“ a stlačte kláves Enter.

Info():

Táto funkcia vracia informácie o požadovanom , moduly a pod.

scipy.info (klaster)

zdroj ():

Zdrojový kód sa vracia iba pre objekty napísané v . Táto funkcia nevracia užitočné informácie, ak sú metódy alebo objekty napísané v inom jazyku, ako je napríklad C. Ak však chcete túto funkciu využiť, môžete to urobiť nasledovne:

scipy.source (klaster)

Špeciálne funkcie:

SciPy poskytuje množstvo špeciálnych funkcií, ktoré sa používajú v matematickej fyzike, napríklad eliptické, komfortné funkcie, gama, beta atď.Ak chcete vyhľadať všetky funkcie, môžete využiť funkciu help (), ako je popísané vyššie.

Exponenciálne a trigonometrické funkcie:

Balíček špeciálnych funkcií SciPy poskytuje množstvo funkcií, prostredníctvom ktorých môžete nájsť exponenty a vyriešiť trigonometrické problémy.

Uvažujme o nasledujúcom príklade:

PRÍKLAD:

zo 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)

VÝKON:

1 000,0
8.0
1.0
0,7071067811865475

V balíku špeciálnych funkcií SciPy je veľa ďalších funkcií, ktoré si môžete vyskúšať sami.

Integračné funkcie:

SciPy poskytuje množstvo funkcií na riešenie integrálov. Od bežného diferenciálneho integrátora po použitie lichobežníkových pravidiel na výpočet integrálov je SciPy zásobárňou funkcií na riešenie všetkých typov integrálnych problémov.

pole zoradiť c ++

Všeobecná integrácia:

SiPy poskytuje funkciu s názvom štvorkolka na výpočet integrálu funkcie, ktorá má jednu premennú. Limity môžu byť ± a infin(± inf) na označenie nekonečných limitov. Syntax funkcie quad () je nasledovná:

SYNTAX:

quad (func, a, b, args = (), full_output = 0, epsabs = 1,49e-08, epsrel = 1,49e-08, limit = 50, body = None, weight = None, wvar = None, wopts = None , maxp1 = 50, limlst = 50)

Tu bude funkcia integrovaná medzi limity a a b (môže byť tiež nekonečná).

PRÍKLAD:

zo scipy import špeciál zo scipy import integrovať a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)

Vo vyššie uvedenom príklade sa funkcia ‘a’ hodnotí medzi limitmi 0, 1. Po vykonaní tohto kódu uvidíte nasledujúci výstup.

VÝKON:

(3.9086503371292665, 4.3394735994897923e-14)

Dvojitá integrálna funkcia:

SciPy poskytuje dblquad ktoré možno použiť na výpočet dvojitých integrálov. Dvojitý integrál, ako mnohí z nás vedia, pozostáva z dvoch skutočných premenných. Funkcia dblquad () vezme funkciu, ktorá sa má integrovať ako jej parameter, spolu s ďalšími 4 premennými, ktoré definujú limity a funkcie D Y a dx.

PRÍKLAD:

z importu scipy integrovať a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)

VÝKON:

-1.3333333333333335, 1.4802973661668755e-14)

SciPy poskytuje rôzne ďalšie funkcie na vyhodnotenie trojitých integrálov, n integrálov, Rombergových integrálov atď., Ktoré môžete podrobnejšie preskúmať. Ak chcete vyhľadať všetky podrobnosti o požadovaných funkciách, použite funkciu pomocníka.

Optimalizačné funkcie:

Scipy.optimize poskytuje množstvo bežne používaných optimalizačných algoritmov, ktoré je možné vidieť pomocou funkcie pomocníka.

Pozostáva v zásade z nasledujúcich častí:

  • Neobmedzená a obmedzená minimalizácia viacrozmerných skalárnych funkcií, t minimalizovať (napr. BFGS, Newton Conjugate Gradient, Nelder_mead simplex atď.)
  • Postupy globálnej optimalizácie (napr. Diferenciálna_evolúcia, duálne_anažovanie atď.)
  • Minimalizácia najmenších štvorcov a prispôsobenie krivky (napr. Najmenšie štvorce, curve_fit atď.)
  • Minimalizátory skalárnych univariačných funkcií a vyhľadávače koreňov (napr. Minimal_scalar a root_scalar)
  • Riešitelia systému viacerých rovníc pomocou algoritmov ako hybrid Powell, Levenberg-Marquardt.

Funkcia Rosenbrook:

Funkcia Rosenbrook ( zovrieť ) je testovací problém používaný pre optimalizačné algoritmy založené na gradiente. V SciPy je definovaná takto:

rosen-Scipy tutorial-edurekaPRÍKLAD:

import numpy ako np zo scipy.optimize import rosen a = 1,2 * np.arange (5) rosen (a)

VÝKON: 7371.0399999999945

Nelder-Mead:

TheNelder–Meadova metóda je numerická metóda často používaná na vyhľadanie min / max funkcie v multidimenzionálnom priestore. V nasledujúcom príklade je použitá metóda minimalizácie spolu s algoritmom Nelder-Mead.

PRÍKLAD:

zo scipy import optimize a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x

VÝKON: pole ([0,96570182, 0,93255069, 0,86939478, 0,75497872, 0,56793357])

Funkcie interpolácie:

V oblasti numerickej analýzy sa interpolácia vzťahuje na konštrukciu nových údajových bodov v množine známych údajových bodov. Knižnica SciPy pozostáva z čiastkového balíka s názvom scipy.interpolate, ktorý sa skladá zfunkcie a triedy spline, jednorozmerné a viacrozmerné (jednorozmerné a viacrozmerné) interpolačné triedy atď.

Jednorozmerná interpolácia:

Jednorozmerná interpolácia je v podstate oblasťou prispôsobenia krivky, ktoránájde krivku, ktorá poskytuje presné prispôsobenie k sérii dvojrozmerných údajových bodov. SciPy poskytuje interp1d funkcia, ktorá sa dá použiť na vytvorenie jednorozmernej interpolácie.

PRÍKLAD:

import matplotlib.pyplot ako plt zo scipy import interpolácie x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # použije interpolačnú funkciu vrátenú parametrom `interp1d` plt.plot (x, y, 'o', x1, y1, '-') plt.show ()

VÝKON:

Multivariačná interpolácia:

Mnohorozmerná interpolácia(priestorovéinterpolácia) je druhinterpoláciana funkcie, ktoré pozostávajú z viac ako jednej premennej. Nasledujúci príklad demonštruje príklad interp2d funkcie.
Interpolácia v dvojrozmernej mriežke pomocou funkcie interp2d (x, y, z) v podstate použije na priblíženie niektorej funkcie polia x, y, z. f: „z = f (x, y)“ a vráti funkciu, ktorej metóda volania používa spline interpolácia na zistenie hodnoty nových bodov.
PRÍKLAD:

zo scipy import interpolácia import matplotlib.pyplot ako plt x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolate.interp2d (x, y, z, kind = 'kubický') 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 ()

VÝKON:

Funkcie Fourierovej transformácie:

Fourierova analýza je metóda, ktorá sa zaoberá vyjadrením funkcie ako súčtu periodických zložiek a obnovením signálu z týchto zložiek. The fft na vrátenie súborudiskrétna Fourierova transformácia reálnej alebo komplexnej sekvencie.

PRÍKLAD:

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

VÝKON: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]

Podobne môžete nájsť inverznú hodnotu pomocou ifft fungujú nasledovne:

PRÍKLAD:

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

VÝKON: [1,5 + 0,j -0,5-0,5j -0,5 + 0,j -0,5 + 0,5j]

Funkcie spracovania signálu:

Zaoberá sa spracovaním signáluanalyzuje, modifikuje a syntetizuje signály ako zvuk, obrázky atď. SciPy poskytuje niektoré funkcie, pomocou ktorých môžete navrhovať, filtrovať a interpolovať jednorozmerné a dvojrozmerné údaje.

Filtrovanie:

Filtrovaním signálu z neho v podstate odstránite nežiaduce komponenty. Ak chcete vykonať usporiadané filtrovanie, môžete využiť order_filter funkcie. Táto funkcia v podstate vykonáva usporiadané filtrovanie na poli. Syntax tejto funkcie je nasledovná:

SYNTAX:
order_filter (a, doména, hodnotenie)

a = N-rozmerné vstupné pole

domain = pole masky s rovnakým počtom rozmerov ako `a`

rank = Nezáporné číslo, ktoré vyberie prvky zo zoznamu po jeho zoradení (0 je najmenšie, po ktorých nasleduje 1 ...)

PRÍKLAD:

zo scipy importného signálu x = np.arange (35) .reshape (7, 5) doména = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, doména, 1))

VÝKON:

[[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.]
[pätnásť. 16. 17. 18. 13.]
[dvadsať. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

Priebehy:

Subbalíček scipy.signal tiež pozostáva z rôznych funkcií, ktoré možno použiť na generovanie kriviek. Jednou z takýchto funkcií je cvrlikanie . Táto funkcia je fgenerátor kosínusom potiahnutý požiadavkou a syntax je nasledovná:

SYNTAX:
chirp (t, f0, t1, f1, method = ‘linear’, phi = 0, vertex_zero = True)

kde,

PRÍKLAD:

zo scipy.signal import chirp, spektrogram import matplotlib.pyplot ako plt t = np.linspace (6, 10, 500) w = chirp (t, f0 = 4, f1 = 2, t1 = 5, metóda = 'lineárna') plt.plot (t, w) plt.title ('Linear Chirp') plt.xlabel ('time in sec)') plt.show ()

VÝKON:

Lineárna algebra:

Lineárna algebra sa zaoberá lineárnymi rovnicami a ich reprezentáciami pomocou vektorových priestorov a matíc. SciPy je postavené naKnižnice ATLAS LAPACK a BLAS a súmimoriadne rýchle pri riešení problémov súvisiacich s lineárnou algebrou. Okrem všetkých funkcií z numpy.linalg poskytuje scipy.linalg aj množstvo ďalších pokročilých funkcií. Tiež, ak sa numpy.linalg nepoužíva spolu sPodpora ATLAS LAPACK a BLAS, scipy.linalg je rýchlejší ako numpy.linalg.

Hľadanie inverzie matice:

Matematicky, inverzia matice Aje maticaBtaké, žeAB = IkdeJaje matica identity pozostávajúca z tých, ktoré sú dole hlavnou uhlopriečkou, označené akoB = A-jeden. V SciPy možno túto inverziu získať pomocou linalg.vv metóda.

PRÍKLAD:

import numpy ako np zo scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.inv (A) tlač (B)

VÝKON:

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

Nájdenie determinantov:

Hodnota odvodená aritmeticky z koeficientov matice je známa ako determinant štvorcovej matice. V SciPy sa to dá urobiť pomocou funkcie the ktorá má nasledujúcu syntax:

SYNTAX:
det (a, overwrite_a = False, check_finite = True)
kde,

a: (M, M) Je štvorcová matica

overwrite_a (bool, voliteľné): Povoliť prepísanie údajov v a

check_finite (bool, voliteľné): Skontrolovať, či vstupná matica pozostáva iba z konečných čísel

PRÍKLAD:

import numpy ako np zo scipy import linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) tlač (B)

VÝKON: -5,0

mongodb vytvoriť užívateľa pre databázu

Riedke vlastné hodnoty:

Vlastné hodnoty sú špecifická sada skalárov spojených s lineárnymi rovnicami. ARPACK umožňuje vyhľadávať vlastné čísla (vektory) pomerne rýchlo. Kompletná funkčnosť ARPACK je zabalená vdve rozhrania na vysokej úrovni, ktoré sú scipy.sparse.linalg.eigs a scipy.sparse.linalg.eigsh. eigs. Rozhranie eigs vám umožňuje nájsť vlastné hodnoty skutočných alebo zložitých nesymetrických štvorcových matíc, zatiaľ čo rozhranie eigsh obsahuje rozhrania pre reálne symetrické alebo komplexno-hermitovské matice.

The osem funkcia rieši zovšeobecnený problém vlastných čísel pre zložitú hermitovskú alebo skutočnú symetrickú maticu.

PRÍKLAD:

z scipy.linalg import osem import numpy ako np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a, b = osem (A) print ('Selected eigenvalues:', a) print ('Complex ndarray:', b)

VÝKON:

Vybrané vlastné čísla: [-2,53382695 1,66735639 3,69488657 12,17158399]
Komplexné pole: [[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]]

Štruktúry priestorových údajov a algoritmy:

Priestorové údaje v zásade pozostávajú z objektov, ktoré sú tvorené úsečkami, bodmi, povrchmi atď. Balík SciPy scipy.spatial môže vypočítaťVoronoiove diagramy, triangulácie atď. Pomocou knižnice Qhull. Skladá sa tiež z implementácií KDTree pre dotazy na body najbližšieho suseda.

Delaunayove triangulácie:

Matematicky je Delaunayova triangulácia pre množinu samostatných bodov v rovine taká, že žiadny bod v danej množine bodov nie jevo vnútri kruhu ľubovoľného trojuholníka.

PRÍKLAD:

importovať matplotlib.pyplot ako plt zo scipy.spatial import Delaunay points = np.array ([[[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (body) #Delaunay objekt print (a) print (a.simplices) plt.triplot (body [:, 0], body [:, 1], a.simplices) plt.plot (body [:, 1], body [:, 0], 'o') plt.show ()

VÝKON:

Funkcie multidimenzionálneho spracovania obrazu:

Spracovanie obrazu sa v zásade zaoberá vykonaním operácií na obrázku, aby sa získali informácie alebo získal vylepšený obrázok z pôvodného. Balík scipy.ndimage sa skladá z niekoľkých súborovfunkcie spracovania a analýzy obrazu určené na prácu s poliami ľubovoľnej rozmernosti.

Konvolúcia a korelácia:

SciPy poskytuje množstvo funkcií, ktoré umožňujú koreláciu a konvolúciu obrázkov.

  • Funkcia korelát1d možno použiť na výpočet jednorozmernej korelácie pozdĺž danej osi
  • Funkcia korelovať umožňuje viacrozmernú koreláciu ľubovoľného daného poľa so zadaným jadrom
  • Funkcia konvolve1d možno použiť na výpočet jednorozmernej konvolúcie pozdĺž danej osi
  • Funkcia stočiť sa umožňuje multidimenzionálnu konvolúciu ľubovoľného daného poľa so zadaným jadrom

PRÍKLAD:

importovať numpy ako np zo scipy.ndimage import correlate1d correlate1d ([3,5,1,7,2,6,9,4], váhy = [1,2])

VÝKON: pole ([9, 13, 7, 15, 11, 14, 24, 17])

IO súbor:

Balík scipy.io poskytuje množstvo funkcií, ktoré vám pomôžu spravovať súbory rôznych formátov, ako sú súbory MATLAB, súbory IDL, súbory Matrix Market atď.

Ak chcete tento balík využiť, budete ho musieť importovať nasledovne:

import scipy.io ako sio

Kompletné informácie o podbalení nájdete v oficiálnom dokumente na Súbor IO .

Týmto sa dostávame na koniec tohto tutoriálu SciPy. Dúfam, že ste všetko pochopili jasne. Určite cvičte čo najviac .

Máte na nás otázku? Uveďte to prosím v sekcii komentárov v tomto blogu „SciPy Tutorial“ a my sa vám ozveme čo najskôr.

Ak chcete získať podrobné informácie o Pythone a jeho rôznych aplikáciách, môžete sa zaregistrovať naživo s nepretržitou podporou a doživotným prístupom.