SciPy unutra Python Vodič: Što je, biblioteka, funkcija i primjeri
SciPy unutra Python
SciPy unutra Python je knjižnica otvorenog koda koja se koristi za rješavanje matematičkih, znanstvenih, inženjerskih i tehničkih problema. Omogućuje korisnicima manipuliranje podacima i vizualizaciju podataka pomoću širokog raspona visoke razine Python naredbe. SciPy je izgrađen na Python NumPy ekstenzija. SciPy se također izgovara kao "Sigh Pi".
Potpaketi SciPy:
- Ulaz/izlaz datoteke – scipy.io
- Posebna funkcija – scipy.poseban
- Linearna algebra Operacija – scipy.linalg
- Interpolacija – scipy.interpolirati
- Optimizacija i prilagodba – scipy.optimizirati
- Statistika i nasumični brojevi – scipy.statistika
- Numerička integracija – scipy.integrirati
- Brze Fourierove transformacije – scipy.fftpack
- Signal Obrada – scipy.signal
- Manipulacija slikama – scipy.ndimage
Zašto koristiti SciPy
- SciPy sadrži različite potpakete koji pomažu u rješavanju najčešćih problema povezanih sa znanstvenim računanjem.
- SciPy paket u Python je najčešće korištena znanstvena knjižnica, odmah iza GNU-ove znanstvene knjižnice za C/C++ ili Matlab-a.
- Jednostavan za korištenje i razumijevanje, kao i brza računalna snaga.
- Može raditi na nizu NumPy biblioteke.
Numpy VS SciPy
numpy
- Numpy je napisan u C-u i koristi se za matematičke ili numeričke izračune.
- Brži je od ostalih Python Knjižnice
- Numpy je najkorisnija biblioteka za Data Science za izvođenje osnovnih izračuna.
- Numpy ne sadrži ništa osim vrste podataka polja koja izvodi najosnovnije operacije poput sortiranja, oblikovanja, indeksiranja itd.
SciPy
- SciPy je ugrađen u NumPy
- SciPy modul u Python je potpuno opremljena verzija Linearne algebre dok Numpy sadrži samo nekoliko značajki.
- Većina novih značajki Data Science dostupna je u Scipyju, a ne u Numpyju.
SciPy – Instalacija i postavljanje okruženja
Također možete instalirati SciPy u Windows putem pipa
Python3 -m pip install --user numpy scipy
Instalirajte Scipy na Linux
sudo apt-get install python-scipy python-numpy
Instalirajte SciPy na Mac
sudo port install py35-scipy py35-numpy
Prije nego počnemo učiti SciPy Python, trebate poznavati osnovne funkcije kao i različite vrste niza numpy
Standardni način uvoza SciPy modula i Numpyja:
from scipy import special #same for other modules import numpy as np
Paket za ulaz/izlaz datoteke
Scipy, I/O paket, ima širok raspon funkcija za rad s različitim formatima datoteka kao što su Matlab, Arff, Wave, Matrix Market, IDL, NetCDF, TXT, CSV i binarni format.
Uzmimo jedan format datoteke Python SciPy primjer koji se redovito koristi u MatLabu:
import numpy as np from scipy import io as sio array = np.ones((4, 4)) sio.savemat('example.mat', {'ar': array}) data = sio.loadmat(‘example.mat', struct_as_record=True) data['ar']
Izlaz:
array([[ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.], [ 1., 1., 1., 1.]])
Objašnjenje koda
- Redak 1 i 2: Uvezite osnovnu biblioteku SciPy Python s I/O paketom i Numpyjem.
- linija 3: Stvorite 4 x 4, dimenzionalni niz
- linija 4: Pohrani niz u primjer.mat file.
- Redak 5: Dobiti podatke od primjer.mat file
- linija 6: Ispis.
Paket posebnih funkcija
- scipy.poseban paket sadrži brojne funkcije matematičke fizike.
- Posebna funkcija SciPy uključuje kubični korijen, eksponencijal, eksponencijal log zbroja, Lambert, permutaciju i kombinacije, gama, Bessel, hipergeometriju, Kelvin, beta, parabolički cilindar, eksponencijal relativne pogreške itd.
- Za opis svih ovih funkcija u jednom retku upišite Python konzola:
help(scipy.special) Output: NAME scipy.special DESCRIPTION ======================================== Special functions (:mod:`scipy.special`) ======================================== .. module:: scipy.special Nearly all of the functions below are universal functions and follow broadcasting and automatic array-looping rules. Exceptions are noted.
Funkcija kubičnog korijena
Funkcija kubičnog korijena pronalazi kubni korijen vrijednosti.
Sintaksa:
scipy.special.cbrt(x)
Primjer:
from scipy.special import cbrt #Find cubic root of 27 & 64 using cbrt() function cb = cbrt([27, 64]) #print value of cb print(cb)
Izlaz: niz([3., 4.])
Eksponencijalna funkcija:
Eksponencijalna funkcija izračunava 10**x po elementima.
Primjer:
from scipy.special import exp10 #define exp10 function and pass value in its exp = exp10([1,10]) print(exp)
Izlaz: [1.e+01 1.e+10]
Permutacije i kombinacije
SciPy također daje funkcionalnost za izračunavanje permutacija i kombinacija.
Kombinacije - scipy.poseban.comb(N,k)
Primjer:
from scipy.special import comb #find combinations of 5, 2 values using comb(N, k) com = comb(5, 2, exact = False, repetition=True) print(com)
Izlaz: 15.0
Permutacije –
scipy.special.perm(N,k)
Primjer:
from scipy.special import perm #find permutation of 5, 2 using perm (N, k) function per = perm(5, 2, exact = True) print(per)
Izlaz: 20
Log zbroj eksponencijalne funkcije
Log Sum Exponential izračunava log zbroja eksponencijalnog ulaznog elementa.
sintaksa:
scipy.special.logsumexp(x)
Besselova funkcija
Funkcija izračuna n-tog cijelog reda
sintaksa:
scipy.special.jn()
Linearna algebra sa SciPy
- Linearna algebra SciPy je implementacija BLAS i ATLAS LAPACK biblioteka.
- Izvedba Linearne algebre vrlo je brza u usporedbi s BLAS-om i LAPACK-om.
- Rutina linearne algebre prihvaća objekt dvodimenzionalnog niza i izlaz je također dvodimenzionalni niz.
Sada napravimo neki test sa scipy.linalg,
računanje determinanta dvodimenzionalne matrice,
from scipy import linalg import numpy as np #define square matrix two_d_array = np.array([ [4,5], [3,2] ]) #pass values to det() function linalg.det( two_d_array )
Izlaz: -7.0
Inverzna matrica –
scipy.linalg.inv()
Inverzna matrica Scipyja izračunava inverziju bilo koje kvadratne matrice.
Da vidimo,
from scipy import linalg import numpy as np # define square matrix two_d_array = np.array([ [4,5], [3,2] ]) #pass value to function inv() linalg.inv( two_d_array )
Izlaz:
array( [[-0.28571429, 0.71428571], [ 0.42857143, -0.57142857]] )
Svojstvene vrijednosti i svojstveni vektor
scipy.linalg.eig()
- Najčešći problem u linearnoj algebri su svojstvene vrijednosti i svojstveni vektor koji se lako mogu riješiti pomoću eig()funkcija.
- Sada ćemo pronaći vlastitu vrijednost (X) i odgovaraju svojstvenom vektoru dvodimenzionalne kvadratne matrice.
Primjer
from scipy import linalg import numpy as np #define two dimensional array arr = np.array([[5,4],[6,3]]) #pass value into function eg_val, eg_vect = linalg.eig(arr) #get eigenvalues print(eg_val) #get eigenvectors print(eg_vect)
Izlaz:
[ 9.+0.j -1.+0.j] #eigenvalues [ [ 0.70710678 -0.5547002 ] #eigenvectors [ 0.70710678 0.83205029] ]
Diskretna Fourierova transformacija – scipy.fftpack
- DFT je matematička tehnika koja se koristi za pretvaranje prostornih podataka u frekvencijske podatke.
- FFT (Fast Fourier Transformation) je algoritam za izračunavanje DFT-a
- FFT se primjenjuje na višedimenzionalni niz.
- Frekvencija definira broj signala ili valne duljine u određenom vremenskom razdoblju.
Primjer: Zamahnite i pokažite pomoću biblioteke Matplotlib. uzmimo primjer jednostavne periodične funkcije sin(20 × 2πt)
%matplotlib inline from matplotlib import pyplot as plt import numpy as np #Frequency in terms of Hertz fre = 5 #Sample rate fre_samp = 50 t = np.linspace(0, 2, 2 * fre_samp, endpoint = False ) a = np.sin(fre * 2 * np.pi * t) figure, axis = plt.subplots() axis.plot(t, a) axis.set_xlabel ('Time (s)') axis.set_ylabel ('Signal amplitude') plt.show()
Izlaz:
Možete vidjeti ovo. Frekvencija je 5 Hz i njegov signal se ponavlja u 1/5 sekunde – to je poziv kao određeni vremenski period.
Iskoristimo sada ovaj sinusoidni val uz pomoć DFT aplikacije.
from scipy import fftpack A = fftpack.fft(a) frequency = fftpack.fftfreq(len(a)) * fre_samp figure, axis = plt.subplots() axis.stem(frequency, np.abs(A)) axis.set_xlabel('Frequency in Hz') axis.set_ylabel('Frequency Spectrum Magnitude') axis.set_xlim(-fre_samp / 2, fre_samp/ 2) axis.set_ylim(-5, 110) plt.show()
Izlaz:
- Možete jasno vidjeti da je izlaz jednodimenzionalni niz.
- Ulaz koji sadrži složene vrijednosti je nula osim dvije točke.
- U DFT primjeru vizualiziramo veličinu signala.
Optimizacija i uklapanje u SciPy – scipy.optimize
- Optimizacija pruža koristan algoritam za minimiziranje prilagođavanja krivulje, višedimenzionalnog ili skalarnog i korijenskog prilagođavanja.
- Uzmimo primjer skalarna funkcija,pronaći minimalnu skalarnu funkciju.
%matplotlib inline import matplotlib.pyplot as plt from scipy import optimize import numpy as np def function(a): return a*2 + 20 * np.sin(a) plt.plot(a, function(a)) plt.show() #use BFGS algorithm for optimization optimize.fmin_bfgs(function, 0)
Izlaz:
Optimizacija je uspješno prekinuta.
Trenutna vrijednost funkcije: -23.241676
Ponavljanja: 4
Ocjene funkcija: 18
Ocjene stupnjeva: 6
niz([-1.67096375])
- U ovom primjeru optimizacija se vrši uz pomoć algoritma gradijentnog spuštanja od početne točke
- Ali mogući problem su lokalni minimumi umjesto globalnih minimuma. Ako ne pronađemo susjeda globalnih minimuma, tada moramo primijeniti globalnu optimizaciju i pronaći globalnu funkciju minimuma koja se koristi kao skakanje u bazen () koji kombinira lokalni optimizator.
optimize.basinhopping(funkcija, 0)
Izlaz:
fun: -23.241676238045315 lowest_optimization_result: fun: -23.241676238045315 hess_inv: array([[0.05023331]]) jac: array([4.76837158e-07]) message: 'Optimization terminated successfully.' nfev: 15 nit: 3 njev: 5 status: 0 success: True x: array([-1.67096375]) message: ['requested number of basinhopping iterations completed successfully'] minimization_failures: 0 nfev: 1530 nit: 100 njev: 510 x: array([-1.67096375])
Nelder – Mead algoritam:
- Nelder-Mead algoritam bira kroz parametar metode.
- Omogućuje najjednostavniji način minimiziranja za pošteno funkcioniranje.
- Nelder – Mead algoritam se ne koristi za procjene gradijenta jer može biti potrebno više vremena da se pronađe rješenje.
import numpy as np from scipy.optimize import minimize #define function f(x) def f(x): return .4*(1 - x[0])**2 optimize.minimize(f, [2, -1], method="Nelder-Mead")
Izlaz:
final_simplex: (array([[ 1. , -1.27109375], [ 1. , -1.27118835], [ 1. , -1.27113762]]), array([0., 0., 0.])) fun: 0.0 message: 'Optimization terminated successfully.' nfev: 147 nit: 69 status: 0 success: True x: array([ 1. , -1.27109375])
Obrada slike sa SciPy – scipy.ndimage
- scipy.ndimage je podmodul SciPy-ja koji se uglavnom koristi za izvođenje operacije povezane sa slikom
- ndimage znači "n" dimenzionalnu sliku.
- SciPy Image Processing omogućuje transformaciju geometrije (rotiranje, obrezivanje, okretanje), filtriranje slike (oštro i dezinfekciju), prikaz slike, segmentaciju slike, klasifikaciju i ekstrakciju značajki.
- RAZNO paket u SciPy sadrži unaprijed izgrađene slike koje se mogu koristiti za izvođenje zadatka manipulacije slikama
Primjer: Uzmimo primjer geometrijske transformacije slika
from scipy import misc from matplotlib import pyplot as plt import numpy as np #get face image of panda from misc package panda = misc.face() #plot or show image of face plt.imshow( panda ) plt.show()
Izlaz:
Sad mi Preklopni trenutna slika:
#Flip Down using scipy misc.face image flip_down = np.flipud(misc.face()) plt.imshow(flip_down) plt.show()
Izlaz:
Primjer: Rotacija slike pomoću Scipyja,
from scipy import ndimage, misc from matplotlib import pyplot as plt panda = misc.face() #rotatation function of scipy for image – image rotated 135 degree panda_rotate = ndimage.rotate(panda, 135) plt.imshow(panda_rotate) plt.show()
Izlaz:
Integracija sa Scipyjem – Numerička integracija
- Kada integriramo bilo koju funkciju gdje analitička integracija nije moguća, moramo se okrenuti numeričkoj integraciji
- SciPy pruža funkcionalnost za integraciju funkcije s numeričkom integracijom.
- scipy.integrirati biblioteka ima jednostruku integraciju, dvostruku, trostruku, višestruku, Gaussov kvadrat, Rombergova, trapezna i Simpsonova pravila.
Primjer: Sada uzmite primjer Jedinstvena integracija
Ovdje a je gornja granica i b je donja granica
from scipy import integrate # take f(x) function as f f = lambda x : x**2 #single integration with a = 0 & b = 1 integration = integrate.quad(f, 0 , 1) print(integration)
Izlaz:
(0.33333333333333337, 3.700743415417189e-15)
Ovdje funkcija vraća dvije vrijednosti, od kojih je prva vrijednost integracija, a druga vrijednost procijenjena pogreška u integralu.
Primjer: sada uzmite SciPy primjer dvostruka integracija. Nalazimo dvostruku integraciju sljedeće jednadžbe,
from scipy import integrate import numpy as np #import square root function from math lib from math import sqrt # set fuction f(x) f = lambda x, y : 64 *x*y # lower limit of second integral p = lambda x : 0 # upper limit of first integral q = lambda y : sqrt(1 - 2*y**2) # perform double integration integration = integrate.dblquad(f , 0 , 2/4, p, q) print(integration)
Izlaz:
(3.0, 9.657432734515774e-14)
Vidjeli ste da je gornji izlaz kao isti prethodni.
Rezime
- SciPy (izgovara se kao "Sigh Pi") je otvoreni izvor Pythonknjižnica koja se koristi u matematici, znanstvenom računarstvu, inženjerstvu i tehničkom računarstvu.
- SciPy sadrži različite potpakete koji pomažu u rješavanju najčešćih problema povezanih sa znanstvenim računanjem.
- SciPy je ugrađen u NumPy
Naziv paketa | Description |
---|---|
scipy.io | Ulaz/izlaz datoteke |
scipy.poseban | Posebna funkcija |
scipy.linalg | Linearna algebra OperaANJE |
scipy.interpolirati | Interpolacija |
scipy.optimizirati | Optimizacija i prilagodba |
scipy.statistika | Statistika i slučajni brojevi |
scipy.integrirati | Numerička integracija |
scipy.fftpack | Brze Fourierove transformacije |
scipy.signal | Signal Obrada |
scipy.ndimage | Manipulacija slikama – |