SciPy bemutató: Mi az a Python SciPy és hogyan kell használni?



A SciPy egy Python könyvtár, amelyet tudományos és matematikai problémák megoldására használnak. NumPy vs SciPy. Basic, Special, Integration, Optimization, stb., Példákkal.

A matematika nagyon sok fogalommal foglalkozik, amelyek nagyon fontosak, ugyanakkor összetettek és időigényesek. Azonban, biztosítja a teljes értékű SciPy könyvtárat, amely megoldja ezt a problémát számunkra. Ebben a SciPy oktatóanyagban megtanulhatja, hogyan kell használni ezt a könyvtárat, néhány funkcióval és példájukkal együtt.

Mielőtt továbblépne, vessen egy pillantást a cikkben tárgyalt összes témára:





Kezdjük tehát. :)

Mi a SciPy?

A SciPy egy nyílt forráskódú Python könyvtár, amelyet tudományos és matematikai problémák megoldására használnak. Arra épül kiterjesztés, és lehetővé teszi a felhasználó számára, hogy az adatokat magas szintű parancsok széles skálájával manipulálja és vizualizálja. Mint korábban említettük, a SciPy a NumPy-re épít, és ezért ha importálja a SciPy-t, akkor nem kell importálnia a NumPy-t.



NumPy vs SciPy

A NumPy és a SciPy is használt matematikai és numerikus elemzéshez. A NumPy tömbadatokat és alapvető műveleteket tartalmaz, például válogatást, indexelést stb., Míg a SciPy az összes numerikus kódból áll. Bár a NumPy számosat kínál amelyek segíthetnek a lineáris algebra, a Fourier-transzformációk stb. megoldásában, a SciPy az a könyvtár, amely valójában e funkciók teljes értékű változatait tartalmazza sok mással együtt. Ha azonban tudományos elemzést végez Python használatával, telepítenie kell a NumPy-t és a SciPy-t is, mivel a SciPy a NumPy-re épít.

Alcsomagok a SciPy-ben:

A SciPy számos alcsomaggal rendelkezik különféle tudományos számításokhoz, amelyeket az alábbi táblázat mutat be:

konvertálni dupla int java
NévLeírás
fürtFürtözési algoritmusok
állandókFizikai és matematikai állandók
fftpackGyors Fourier Transform rutinok
egyesítIntegráció és közönséges differenciálegyenlet-megoldók
interpolálInterpoláció és a spline simítása
énBemenet és kimenet
linalgLineáris algebra
repülökN-dimenziós képfeldolgozás
odrOrtogonális távolság regresszió
optimalizálniOptimalizálás és gyökérkeresési rutinok
jelJelfeldolgozás
ritkaRitka mátrixok és a hozzájuk kapcsolódó rutinok
térbeliTérbeli adatszerkezetek és algoritmusok
különlegesSpeciális funkciók
statisztikaStatisztikai eloszlások és függvények

A részletes leírásért azonban követheti a hivatalos dokumentáció .



Ezeket a csomagokat kizárólag használatuk előtt kell importálni. Például:

scipy import klaszterből

Mielőtt részletesen megvizsgálnánk ezeket a funkciókat, először vessünk egy pillantást azokra a funkciókra, amelyek mind a NumPy, mind a SciPy programban közösek.

Alapfunkciók:

Interakció a NumPy-vel:

A SciPy a NumPy-re épít, és ezért maga a NumPy-funkciókat is felhasználhatja a tömbök kezelésére. Ha részletesebben meg szeretné tudni ezeket a funkciókat, egyszerűen használhatja a help (), az info () vagy a source () függvényeket.

Segítség():

Bármely funkcióval kapcsolatos információkhoz használhatja a Segítség() funkció. Kétféle módon lehet ezt a funkciót használni:

  • paraméterek nélkül
  • paraméterek felhasználásával

Itt van egy példa, amely bemutatja mindkét fenti módszert:

a scipy import fürt súgóból (fürt) #paraméteres segítséggel () #paraméter nélkül

A fenti kód végrehajtásakor az első súgó () visszaadja a kóddal kapcsolatos információkat fürt almodul. A második súgó () arra kéri a felhasználót, hogy adja meg annak a modulnak, kulcsszónak stb. A nevét, amelyről a felhasználó információt akar keresni. A függvény végrehajtásának leállításához egyszerűen írja be a „quit” parancsot és nyomja meg az Enter billentyűt.

info ():

Ez a függvény információt szolgáltat a kívánt adatokról , modulok stb.

scipy.info (fürt)

forrás():

A forráskód csak azokra az objektumokra kerül visszaadásra, amelyekbe be van írva . Ez a függvény nem ad vissza hasznos információkat abban az esetben, ha a módszereket vagy az objektumokat bármilyen más nyelven írják, például C-vel. Ha azonban ezt a funkciót szeretné használni, akkor a következőképpen teheti meg:

scipy.source (fürt)

Speciális funkciók:

A SciPy számos speciális funkciót kínál, amelyeket a matematikai fizikában használnak, például az elliptikát, kényelmi funkciók, gamma, béta stb.Az összes függvény megkereséséhez használhatja a help () függvényt a korábban leírtak szerint.

Exponenciális és trigonometrikus függvények:

A SciPy Special Function csomagja számos funkciót kínál, amelyeken keresztül kitevőket találhat, és megoldhatja a trigonometrikus problémákat.

Tekintsük a következő példát:

PÉLDA:

a scipy importból speciális a = special.exp10 (3) print (a) b = special.exp2 (3) print (b) c = special.sindg (90) print (c) d = special.cosdg (45) print ( d)

KIMENET:

1000,0
8.0
1.0
0,7071067811865475

A SciPy speciális funkciók csomagjában számos más funkció található, amelyeket Ön is kipróbálhat.

Integrációs funkciók:

A SciPy számos funkciót kínál az integrálok megoldására. A SciPy a közönséges differenciálintegrátortól kezdve a trapéz alakú szabályok használatáig az integrálok kiszámításához a funkciók tárháza az integrálok minden típusú problémájának megoldására.

Általános integráció:

A SiPy egy megnevezett függvényt biztosít quad egy változóval rendelkező függvény integráljának kiszámításához. A határok lehetnek ± és végtelen(± inf) a végtelen határok megjelölésére. A quad () függvény szintaxisa a következő:

SZINTAXIS:

quad (func, a, b, args = (), full_output = 0, epsabs = 1.49e-08, epsrel = 1.49e-08, limit = 50, pont = Nincs, súly = Nincs, wvar = Nincs, wopts = Nincs , maxp1 = 50, legkevesebb = 50)

Itt a függvény beépül az a és b határok közé (végtelen is lehet).

PÉLDA:

a scipy importból speciális a scipy importból integrálja a = lambda x: special.exp10 (x) b = scipy.integrate.quad (a, 0, 1) print (b)

A fenti példában az „a” függvény kiértékelése a 0, 1 határértékek között történik. A kód végrehajtásakor a következő kimenetet látja.

KIMENET:

(3.9086503371292665, 4.3394735994897923e-14)

Dupla integrált funkció:

A SciPy biztosítja dblquad amellyel kiszámolhatók a kettős integrálok. A kettős integrál, amint azt sokan tudjuk, két valós változóból áll. A dblquad () függvény a függvényt integrálja paramétereként 4 másik változóval együtt, amelyek meghatározzák a határokat és a függvényeket dy és dx.

PÉLDA:

a scipy importból integrálja a = lambda y, x: x * y ** 2 b = lambda x: 1 c = lambda x: -1 integrate.dblquad (a, 0, 2, b, c)

KIMENET:

-1,3333333333333335, 1,4802973661668755e-14)

A SciPy számos más funkciót biztosít a hármas integrálok, n integrálok, Romberg integrálok stb. Értékeléséhez, amelyeket részletesen tovább vizsgálhat. A szükséges funkciók minden részletének megismeréséhez használja a súgó funkciót.

Optimalizálási funkciók:

A scipy.optimize számos általánosan használt optimalizálási algoritmust biztosít, amelyek a súgó funkció segítségével láthatók.

Alapvetően a következőkből áll:

  • A többváltozós skaláris függvények korlátlan és korlátozott minimalizálása, azaz minimalizálni (pl. BFGS, Newton konjugált gradiens, Nelder_mead simplex stb.)
  • Globális optimalizálási rutinok (pl. Different_evolution, dual_annealing stb.)
  • Legkisebb négyzetek minimalizálása és görbeillesztés (pl. Legkisebb négyzetek, görbe_illesztések stb.)
  • Skaláris egyváltozós függvények minimalizálói és gyökérkeresői (pl. Minimalize_scalar és root_scalar)
  • Többváltozós egyenletrendszer-megoldók olyan algoritmusok alkalmazásával, mint a hibrid Powell, Levenberg-Marquardt.

Rosenbrook funkció:

Rosenbrook-függvény ( rosen ) a gradiens alapú optimalizálási algoritmusok tesztproblémája. A SciPy a következőképpen határozza meg:

rosen-Scipy bemutató-edurekaPÉLDA:

import numpy mint np a scipy-ből. optimalizálja az import rosen a = 1.2 * np.arange (5) rosen (a)

KIMENET: 7371.0399999999945

Nelder-Mead:

AzNelder–Mead módszer egy numerikus módszer, amelyet gyakran egy funkció min / max megtalálásához használnak egy többdimenziós térben. A következő példában a minimalizálási módszert alkalmazzák a Nelder-Mead algoritmussal együtt.

PÉLDA:

a scipy importból optimalizál a = [2.4, 1.7, 3.1, 2.9, 0.2] b = optimize.minimize (optimize.rosen, a, method = 'Nelder-Mead') b.x

KIMENET: tömb ([0.96570182, 0.93255069, 0.86939478, 0.75497872, 0.56793357])

Interpolációs funkciók:

A numerikus elemzés területén az interpoláció új adatpontok létrehozására utal az ismert adatpontok halmazán belül. A SciPy könyvtár a scipy.interpolate nevű alcsomagból áll, amelyből állspline függvények és osztályok, egydimenziós és többdimenziós (egy- és többváltozós) interpolációs osztályok stb.

Egyváltozós interpoláció:

Az egyváltozós interpoláció alapvetően egy olyan görbeillesztési terület, amelymegtalálja azt a görbét, amely pontosan illeszkedik a kétdimenziós adatpontok sorozatához. A SciPy biztosítja interp1d függvény, amely felhasználható egyváltozós interpoláció előállítására.

PÉLDA:

import matplotlib.pyplot plt-ként a scipy importálási interpolátumából x = np.arange (5, 20) y = np.exp (x / 3.0) f = interpolate.interp1d (x, y) x1 = np.arange (6, 12) y1 = f (x1) # használja az 'interp1d' plt.plot (x, y, 'o', x1, y1, '-') által visszaadott interpolációs függvényt plt.show ()

KIMENET:

Többváltozós interpoláció:

Többváltozós interpoláció(térbeliinterpoláció) egyfajtainterpolációtöbb változóból álló függvényeken. A következő példa bemutatja a interp2d funkció.
Az interpolálás egy 2-D rácson az interp2d (x, y, z) függvény segítségével alapvetően x, y, z tömbökkel fogja megközelíteni néhány függvényt f: „z = f (x, y)“ és visszaad egy függvényt, amelynek hívási módszere használja spline interpoláció hogy megtalálja az új pontok értékét.
PÉLDA:

a scipy importból interpolálja az import matplotlib.pyplot-t plt-ként x = np.arange (0,10) y = np.arange (10,25) x1, y1 = np.meshgrid (x, y) z = np.tan (xx + yy) f = interpolátum.interp2d (x, y, z, kedves = 'köbös') x2 = np.tartomány (2,8) y2 = np.tartomány (15,20) z2 = f (új, új) plt. plot (x, z [0,:], 'ro-', x2, z2 [0,:], '-') plt.show ()

KIMENET:

Fourier transzformációs funkciók:

A Fourier-analízis egy olyan módszer, amely egy függvény periodikus komponensek összegeként való kifejezésével és a jel visszaszerzésével foglalkozik. Az fft függvények használhatók aegy valós vagy komplex szekvencia diszkrét Fourier-transzformációja.

PÉLDA:

a scipy.fftpack fájlból importáljon fft, ifft x = np.array ([0,1,2,3]) y = fft (x) print (y)

KIMENET: [6. + 0.j -2. + 2.j -2. + 0.j -2.-2.j]

Hasonlóképpen megtalálhatja ennek inverzét a ifft az alábbiak szerint működik:

PÉLDA:

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

KIMENET: [1,5 + 0,j -0,5-0,5j -0,5 + 0,j -0,5 + 0,5j]

Jelfeldolgozási funkciók:

A jelfeldolgozás foglalkozikjelek, például hang, képek stb. elemzése, módosítása és szintetizálása. A SciPy néhány funkciót biztosít, amelyek segítségével egy- és kétdimenziós adatokat tervezhet, szűrhet és interpolálhat.

Szűrő:

A jel szűrésével alapvetően eltávolítja a nem kívánt összetevőket. A rendezett szűrés elvégzéséhez használhatja a megrendelés_szűrő funkció. Ez a funkció alapvetően rendezett szűrést hajt végre egy tömbön. Ennek a függvénynek a szintaxisa a következő:

SZINTAXIS:
rendelésszűrő (a, domain, rang)

a = N-dimenziós bemeneti tömb

domain = maszk tömb, amely ugyanolyan dimenzióval rendelkezik, mint az 'a'

rank = Nem negatív szám, amely válogatás után kiválasztja az elemeket a listából (0 a legkisebb, majd 1…)

PÉLDA:

scipy import jelből x = np.arange (35) .reshape (7, 5) domain = np.identity (3) print (x, end = 'nn') print (signal.order_filter (x, domain, 1))

KIMENET:

[[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.]
[tizenöt. 16. 17. 18. 13.]
[húsz. 21. 22. 23. 18.]
[25. 26. 27. 28. 23.]
[0. 25. 26. 27. 28.]]

Hullámformák:

A scipy.signal alcsomag különféle funkciókból áll, amelyek felhasználhatók hullámalakok előállítására. Az egyik ilyen funkció az csipog . Ez a függvény egy figény szerinti seprű koszinusz-generátor és a szintaxis a következő:

SZINTAXIS:
csipogás (t, f0, t1, f1, method = ’lineáris’, phi = 0, vertex_zero = True)

hol,

PÉLDA:

a scipy.signal import csiripelésből, a spektrogram beolvasása matplotlib.pyplot plt t = np.linspace (6, 10, 500) w = csiripelés (t, f0 = 4, f1 = 2, t1 = 5, módszer = 'lineáris') plt.plot (t, w) plt.title ('Lineáris csipogás') plt.xlabel ('idő másodpercben' ') plt.show ()

KIMENET:

Lineáris algebra:

A lineáris algebra lineáris egyenletekkel és azok ábrázolásával foglalkozik vektorterek és mátrixok felhasználásával. A SciPy tovább épülATLAS LAPACK és BLAS könyvtárak ésrendkívül gyorsan megoldja a lineáris algebrával kapcsolatos problémákat. A numpy.linalg összes függvénye mellett a scipy.linalg számos más speciális funkciót is biztosít. Továbbá, ha a numpy.linalg fájlt nem együtt használjákATLAS LAPACK és BLAS támogatás, a scipy.linalg gyorsabb, mint a numpy.linalg.

A mátrix inverzének megkeresése:

Matematikailag az A mátrix inverzea mátrixBoly módon, hogyAB = Iholénaz az azonosító mátrix, amely a főátlóban lentiekből állB = A-egy. A SciPy-ben ez az inverz a linalg.inv módszer.

PÉLDA:

importáljon számot np-ként a scipy-ből importáljon linalg A = np.array ([[[1,2], [4,3]]) B = linalg.inv (A) print (B)

KIMENET:

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

A meghatározók meghatározása:

A mátrix együtthatóiból aritmetikailag levezetett érték a négyzetmátrix determinánsaként ismert. A SciPy-ben ezt egy függvény segítségével lehet megtenni az amelynek a következő szintaxisa van:

SZINTAXIS:
det (a, felülírás_a = hamis, ellenőrzés_ véges = igaz)
hol,

a: (M, M) Négyzetmátrix

overwrite_a (bool, opcionális): Adatok felülírásának engedélyezése az a-ban

check_finite (bool, opcionális): Annak ellenőrzése, hogy a bemeneti mátrix csak véges számokból áll-e

PÉLDA:

import szám, mint np a scipyből, importáljon linalg A = np.array ([[1,2], [4,3]]) B = linalg.det (A) print (B)

KIMENET: -5,0

Ritka sajátértékek:

A sajátértékek a skalárok sajátos halmaza, lineáris egyenletekkel összekapcsolva. Az ARPACK biztosítja, hogy a sajátértékeket (sajátvektorokat) meglehetősen gyorsan megtalálja. Az ARPACK teljes funkcionalitása benne vankét magas szintű interfész, amelyek scipy.sparse.linalg.eigs és scipy.sparse.linalg.eigsh. eigs. Az eigs felület lehetővé teszi, hogy megtalálja a valós vagy összetett nem szimmetrikus négyzetmátrixok sajátértékeit, míg az eigsh interfész valós szimmetrikus vagy komplex hermita mátrixok interfészeit tartalmazza.

Az nyolcadik függvény egy általánosított sajátérték-problémát old meg egy komplex hermita vagy valós szimmetrikus mátrix esetén.

PÉLDA:

a scipy.linalg oldalról importáljon nyolc import számot, np A = np.array ([[1, 2, 3, 4], [4, 3, 2, 1], [1, 4, 6, 3], [2, 3, 2, 5]]) a), b = nyolc (A) nyomtatás ('Kiválasztott sajátértékek:', a) nyomtatás ('Komplex ndarray:', b)

KIMENET:

Kiválasztott sajátértékek: [-2.53382695 1.66735639 3.69488657 12.17158399]
Komplex 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]]

Téradat-struktúrák és algoritmusok:

A téradatok alapvetően vonalakból, pontokból, felületekből stb. Álló objektumokból állnak. A SciPy scipy.spatial csomagja kiszámíthatjaVoronoi diagramok, háromszögelések stb. A Qhull könyvtár segítségével. Ez a KDTree implementációkból áll a legközelebbi szomszéd pont lekérdezéseihez is.

Delaunay háromszögelések:

Matematikailag a Delaunay háromszögelések egy síkban lévő diszkrét pontok halmazára olyan háromszögelést jelentenek, hogy az adott ponthalmazban egyetlen pont sembármely háromszög körkörében.

PÉLDA:

import matplotlib.pyplot plt-ként a scipy.spatial-ból Delaunay-pontok importálása = np.array ([[0, 1], [1, 1], [1, 0], [0, 0]]) a = Delaunay (pontok) #Delaunay objektum nyomtatás (a) print (a.simplices) plt.triplot (points [:, 0], points [:, 1], a.simplices) plt.plot (points [:, 1], points [:, 0], 'o') plt.show ()

KIMENET:

Többdimenziós képfeldolgozási funkciók:

A képfeldolgozás alapvetően egy képen végzett műveletek végrehajtásával foglalkozik információk lekérése vagy az eredeti továbbfejlesztett képének megszerzése érdekében. A scipy.ndimage csomag számosképfeldolgozó és elemző funkciók, amelyek tetszőleges dimenziós tömbökkel működnek.

Konvolúció és összefüggés:

A SciPy számos olyan funkciót biztosít, amelyek lehetővé teszik a képek korrelációját és konvolúcióját.

  • A funkció correlate1d felhasználható egy dimenziós korreláció kiszámításához egy adott tengely mentén
  • A funkció korrelál lehetővé teszi bármely tömb többdimenziós korrelációját a megadott kernellel
  • A funkció convolve1d felhasználható egy dimenziós konvolúció kiszámításához egy adott tengely mentén
  • A funkció összecsavar lehetővé teszi bármely adott tömb többdimenziós konvolúcióját a megadott kernellel

PÉLDA:

importáljon számot np-ként a scipy.ndimage fájlból az correlate1d correlate1d ([3,5,1,7,2,6,9,4], súlyok [1,2])

KIMENET: tömb ([9, 13, 7, 15, 11, 14, 24, 17])

IO fájl:

A scipy.io csomag számos olyan funkciót tartalmaz, amelyek segítenek a különböző formátumú fájlok kezelésében, például MATLAB fájlok, IDL fájlok, Matrix Market fájlok stb.

A csomag használatához a következőképpen kell importálnia:

importálja a scipy.io-t sio-ként

Az alcsomagokkal kapcsolatos teljes információkért tekintse meg a következő hivatalos dokumentumot: File IO .

Ezzel a SciPy oktatóanyag végére érünk. Remélem, mindent tisztán megértett. Győződjön meg arról, hogy a lehető legtöbbet gyakorolja .

Van egy kérdésünk? Kérjük, említse meg a „SciPy Tutorial” blog megjegyzés rovatában, és a lehető leghamarabb kapcsolatba lépünk Önnel.

Ha mélyreható ismereteket szeretne szerezni a Pythonról és a különböző alkalmazásokról, regisztrálhat élőben 24/7 támogatással és élethosszig tartó hozzáféréssel.