A matematika rengeteg fogalommal foglalkozik, amelyek nagyon fontosak, ugyanakkor bonyolultak és időigényesek. A Python azonban biztosítja a teljes értékű SciPy könyvtárat, amely megoldja számunkra ezt a problémát. Ebben a SciPy oktatóanyagban megtanuljuk, hogyan használhatjuk ezt a könyvtárat néhány függvény és azok példái mellett.
Mielőtt továbblépnénk, nézzük meg a cikkben tárgyalt témákat:
- Mi az a SciPy?
- NumPy vs SciPy
- Alcsomagok a SciPy-ben
- Az alapfüggvények
- Speciális függvények
- Integrációs függvények
- Optimalizációs függvények
- Fourier transzformációs függvények
- Signal Process Processing Functions
- Lineáris algebra
- Sparse Eigenvalues
- Spatial Data Structures and Algorithms
- Multidimensional Image Processing Functions
- File IO
So lássunk hozzá. 🙂
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. A NumPy kiterjesztésre épül, és lehetővé teszi a felhasználó számára az adatok manipulálását és vizualizálását számos magas szintű paranccsal. Mint korábban említettük, a SciPy a NumPy-ra épül, ezért ha a SciPy-t importáljuk, nincs szükség a NumPy importálására.
NumPy vs SciPy
A NumPy és a SciPy egyaránt matematikai és numerikus elemzésekre használt Python könyvtárak. A NumPy tartalmazza a tömbadatokat és az olyan alapvető műveleteket, mint a rendezés, indexelés stb. míg a SciPy az összes numerikus kódot tartalmazza. Bár a NumPy számos olyan függvényt biztosít, 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 ezeknek a függvényeknek a teljes funkcionalitású változatait tartalmazza sok mással együtt. Ha azonban tudományos elemzést végez Python segítségével, akkor a NumPy-t és a SciPy-t is telepítenie kell, mivel a SciPy a NumPy-ra épül.
A SciPy alcsomagjai:
A SciPy számos alcsomaggal rendelkezik különböző tudományos számításokhoz, amelyeket a következő táblázatban mutatunk be:
A részletes leírásért azonban a hivatalos dokumentációt követheti.
Ezeket a csomagokat használatuk előtt kizárólag importálni kell. Például:
from scipy import cluster
Mielőtt részletesen megvizsgálnánk az egyes függvényeket, először nézzük meg azokat a függvényeket, amelyek mind a NumPy-ben, mind a SciPy-ben közösek.
Interakció a NumPy-vel:
A SciPy a NumPy-re épül, ezért a tömbök kezeléséhez magát a NumPy függvényeit is használhatjuk. Ha mélyebben meg akarja ismerni ezeket a függvényeket, egyszerűen használhatja a help(), info() vagy source() függvényeket.
help():
Hogy információt kapjon bármelyik függvényről, használhatja a help() függvényt. Ezt a függvényt kétféleképpen használhatjuk:
- paraméterek nélkül
- paraméterekkel
Itt egy példa, amely mindkét fenti módszert bemutatja:
from scipy import cluster
help(cluster) #with parameter
help() #without parameter
A fenti kód végrehajtásakor az első help() a klaszter almodulra vonatkozó információkat adja vissza. A második help() arra kéri a felhasználót, hogy adja meg bármely modul, kulcsszó stb. nevét, amelyről a felhasználó információt kíván keresni. A függvény végrehajtásának leállításához egyszerűen írja be a ‘quit’ szót, majd nyomja le az Entert.
info():
Ez a függvény a kívánt függvényekről, modulokról stb. ad vissza információkat.
scipy.info(cluster)
source():
A forráskódot csak a Pythonban írt objektumok esetében adja vissza. Ez a függvény nem ad vissza hasznos információt abban az esetben, ha a metódusok vagy objektumok más nyelven íródtak, például C-n. Abban az esetben azonban, ha használni szeretné ezt a függvényt, a következőképpen teheti meg:
scipy.source(cluster)
Speciális függvények:
A SciPy számos speciális függvényt biztosít, amelyeket a matematikai fizikában használnak, például elliptikus, kényelmi függvények, gamma, béta, stb. Az összes függvény megkereséséhez a korábban leírt help() függvényt használhatjuk.
Exponenciális és trigonometrikus függvények:
A SciPy Speciális függvények csomagja számos olyan függvényt biztosít, amelyek segítségével exponenseket találhatunk és trigonometrikus feladatokat oldhatunk meg.
Nézzük meg a következő példát:
PÉLDA:
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)
KIADÁS:
1000,0
8,0
1,0
0.7071067811865475
A SciPy speciális függvénycsomagjában sok más függvény is megtalálható, amelyeket kipróbálhatsz magadnak.
Integrálfüggvények:
A SciPy számos függvényt biztosít integrálok megoldására. A közönséges differenciálintegrátortól kezdve a trapézszabályok használatáig az integrálok kiszámításához a SciPy az integrálproblémák minden típusának megoldására alkalmas függvények tárháza.
Általános integrálás:
A SciPy egy quad nevű függvényt biztosít egy olyan függvény integráljának kiszámításához, amelynek egy változója van. A határértékek lehetnek ( ) a végtelen határértékek jelölésére. A quad() függvény szintaxisa a következő:
SYNTAX:
quad(func, a, b, args=(), full_output=0, epsabs=1.49e-08, epsrel=1.49e-08, limit=50, points=None, weight=None, wvar=None, wopts=None, maxp1=50, limlst=50)
Itt a függvényt az a és b határértékek között integráljuk (lehet végtelen is).
PÉLDA:
from scipy import special
from scipy import integrate
a= lambda x:special.exp10(x)
b = scipy.integrate.quad(a, 0, 1)
print(b)
A fenti példában az ‘a’ függvényt a 0, 1 határértékek között értékeljük ki. Ha ezt a kódot végrehajtjuk, a következő kimenetet látjuk.
KIADÁS:
(3.9086503371292665, 4.3394735994897923e-14)
Kettős integrál függvény:
A SciPy biztosítja a dblquad-ot, amely kettős integrálok kiszámítására használható. A kettős integrál, mint azt sokan tudjuk, két valós változóból áll. A dblquad() függvény az integrálandó függvényt veszi paraméterként, valamint 4 másik változót, amelyek a határértékeket és a dy és dx függvényeket határozzák meg.
PÉLDA:
from scipy import integrate
a = lambda y, x: x*y**2
b = lambda x: 1
c = lambda x: -1
integrate.dblquad(a, 0, 2, b, c)
KIVITEL:
-1.3333333333333333333335, 1.480297366166868755e-14)
A SciPy számos más függvényt is biztosít a hármas integrálok, n integrálok, Romberg-integrálok stb. kiértékelésére, amelyeket részletesebben is megvizsgálhatunk. A szükséges függvényekkel kapcsolatos minden részletet a súgófüggvény segítségével tudhat meg.
Optimalizálási függvények:
A scipy.optimize számos gyakran használt optimalizálási algoritmust biztosít, amelyeket a súgófüggvény segítségével ismerhet meg.
Alapvetően a következőkből áll:
- Többváltozós skalárfüggvények korlátlan és korlátozott minimalizálása, azaz minimalizálása (pl. BFGS, Newton Conjugate Gradient, Nelder_mead simplex, stb.)
- Globális optimalizálási rutinok (pl.. differential_evolution, dual_annealing, stb)
- Kisnégyzetminimalizálás és görbeillesztés (pl. least_squares, curve_fit, stb)
- Skaláris egyváltozós függvények minimalizálói és gyökkeresői (pl. minimize_scalar és root_scalar)
- Multivariáns egyenletrendszer megoldók olyan algoritmusokkal, mint a hibrid Powell, Levenberg-Marquardt.
Rosenbrook függvény:
A Rosenbrook függvény ( rosen) a gradiens alapú optimalizációs algoritmusok tesztproblémája. A SciPy-ban a következőképpen van definiálva:
PÉLDA:
import numpy as np
from scipy.optimize import rosen
a = 1.2 * np.arange(5)
rosen(a)
OUTPUT: 7371.039999999999945
Nelder-Mead:
A Nelder-Mead módszer egy numerikus módszer, amelyet gyakran használnak egy függvény min/max értékének megtalálására egy többdimenziós térben. Az alábbi példában a Nelder-Mead algoritmussal együtt a minimalizálás módszerét használjuk.
PÉLDÁZAT:
from scipy import optimize
a =
b = optimize.minimize(optimize.rosen, a, method='Nelder-Mead')
b.x
OUTPUT: array()
Interpolációs függvények:
A numerikus analízis területén az interpoláció új adatpontok konstruálására utal ismert adatpontok halmazán belül. A SciPy könyvtár egy scipy.interpolate nevű alcsomagból áll, amely spline függvényekből és osztályokból, egydimenziós és többdimenziós (egyváltozós és többváltozós) interpolációs osztályokból stb. áll.
Egyváltozós interpoláció:
Az egyváltozós interpoláció alapvetően a görbeillesztés egy olyan területe, amely kétdimenziós adatpontok egy sorára pontos illeszkedést biztosító görbét talál. A SciPy biztosítja az interp1d függvényt, amely felhasználható az egyváltozós interpoláció előállításához.
PÉLDA:
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) # use interpolation function returned by `interp1d`
plt.plot(x, y, 'o', x1, y1, '--')
plt.show()
KIVITEL:
Multivariáns interpoláció:
A multivariáns interpoláció (térbeli interpoláció ) egyfajta interpoláció az egynél több változóból álló függvényeken. A következő példa egy példát mutat be a
Interpolálás egy kétdimenziós rácson az interp2d(x, y, z) függvény használatával alapvetően x, y, z tömböket használ valamilyen függvény interp2d függvény közelítésére. f: “z = f(x, y)” és egy olyan függvényt ad vissza, amelynek hívási módszere spline interpolációt használ az új pontok értékének megtalálására.
PÉLDA:
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 = interpolate.interp2d(x, y, z, kind='cubic')
x2 = np.arange(2,8)
y2 = np.arange(15,20)
z2 = f(xnew, ynew)
plt.plot(x, z, 'ro-', x2, z2, '--')
plt.show()
KIVITEL:
Fourier transzformációs függvények:
A Fourier-analízis olyan módszer, amely azzal foglalkozik, hogy egy függvényt periodikus komponensek összegeként fejezzen ki, és ezekből a komponensekből nyerje vissza a jelet. Az fft függvények egy valós vagy komplex sorozat diszkrét Fourier-transzformációjának visszaadására használhatók.
PÉLDA:
from scipy.fftpack import fft, ifft
x = np.array()
y = fft(x)
print(y)
KIADÁS:
Hasonlóképpen, ennek inverzét is megtalálhatjuk az ifft függvény segítségével az alábbiak szerint:
PÉLDA:
rom scipy.fftpack import fft, ifft
x = np.array()
y = ifft(x)
print(y)
KIADÁS:
Szignálfeldolgozási függvények:
A jelfeldolgozás olyan jelek elemzésével, módosításával és szintézisével foglalkozik, mint a hang, kép stb. A SciPy biztosít néhány olyan függvényt, amelyek segítségével egy- és kétdimenziós adatokat tervezhetünk, szűrhetünk és interpolálhatunk.
Szűrés:
A jel szűrésével alapvetően a nem kívánt komponenseket távolítjuk el belőle. A rendezett szűrés elvégzéséhez az order_filter függvényt használhatja. Ez a függvény alapvetően egy tömbön végez rendezett szűrést. A függvény szintaxisa a következő:
SYNTAX:
order_filter(a, domain, rank)
a = N dimenziós bemeneti tömb
domain = az `a`-val azonos dimenziószámú maszktömb
rank = Nem negatív szám, amely a rendezés után kiválasztja az elemeket a listából (0 a legkisebb, majd 1…)
PÉLDA:
from scipy import signal
x = np.arange(35).reshape(7, 5)
domain = np.identity(3)
print(x,end='nn')
print(signal.order_filter(x, domain, 1))
OUTPUT:
]
]
Waveforms:
A scipy.signal alcsomag különböző függvényeket is tartalmaz, amelyek hullámformák generálására használhatók. Az egyik ilyen függvény a chirp. Ez a függvény egy frekvenciaszintű koszinuszgenerátor, és a szintaxis a következő:
SYNTAX:
chirp(t, f0, t1, f1, method=’linear’, phi=0, vertex_zero=True)
where,