SciPy
Programmazione Orientata agli Oggettie
Scripting in Python
SciPy: Informazioni di Base
Libreria di algoritmi e strumenti matematici Fornisce:
moduli per l'ottimizzazione, per l'algebra lineare, l'integrazione, funzioni speciali, FFT, elaborazione di segnali ed immagini e altri strumenti comuni nelle scienze e nell'ingegneria.
Scaricabile dal sito: http://www.scipy.org
Importare il modulo
>>> import scipy as sp
Estensioni offerte:scipy.constants: costanti matematiche e fisichescipy.special: funzioni in uso in fisica matematica (ellittiche, Bessel, ipergeometriche)scipy.integrate: metodi di integrazione numerica e integrazione di equazioni differenzialiscipy.optimize: metodi di ottimizzazione (minimi quadrati, gradiente, simulated annealing)scipy.linalg: estensione di numpy.linalg. Soluzione di sistemi lineari, calcolo matriciale, decomposizione, fattorizzazionescipy.sparse: gestione di matrici sparse
SciPy: Informazioni di Base
Estensioni offerte:scipy.interpolate: metodi per l'interpolazione lineare e non di datiscipy.fftpack: Fast Fourier Transformscipy.signal: metodi di signal processing (filtraggio, correlazione, convoluzione, smoothing)scipy.stats: distribuzioni di probabilità continue e discrete, calcolo dei momenti, calcolo cumulative, statistica descrittiva, test...
Esempio di importazione:>>> from scipy import signals, stats
SciPy: Informazioni di Base
Algebra Lineare - linalg
Importazione>>> from scipy import linalg
Funzioni principali:Funzioni di base: inv, solve, det, norm, lstsq, pinvFunzioni di decomposizione: eig, lu, svd, orth, cholesky, qr, schurFunzioni di calcolo matriciale: expm, logm, sqrtm, cosm, coshm...
Autovalori ed autovettori>>> a = numpy.array([[1,3,5], [2,5,1], [2,3,6]])
#calcolo autovalori e autovettori>>> aval, avec = linalg.eig(a) >>> aval
array([ 9.39895873+0.j, -0.73379338+0.j, 3.33483465+0.j])
#gli autovettori sono le colonne della matrice “avec”. Es. primo autovettore >>> avec[:,0]
array([-0.57028326, -0.41979215, -0.70608183])
Algebra Lineare - linalg
Matrice inversa>>> A = numpy.array([[1,2], [3,4]])
#matrice inversa>>> linalg.inv(A) array([[-2. , 1. ], [ 1.5, -0.5]])#verifica: A·A-1 = I>>> A.dot(linalg.inv(A)) array([[1.00000000e+00, 0.00000000e+00], [4.44089210e-16, 1.00000000e+00]])
Determinante>>> A = linalg.det(A) -2
Algebra Lineare - linalg
Sistemi Lineari (Ax = b)>>> A = numpy.array([[1,2], [3,4]])>>> b = numpy.array([[5], [6]])
#soluzioni>>> x = linalg.solve(A,b) >>> x array([[-4. ], [ 4.5]])#verifica>>> A.dot(x)-b array([[ 0.], [ 0.]])
Algebra Lineare - linalg
Integrazione - integrate
Importazione>>> from scipy import integrate
Funzioni principali:quad integrazione di base (integrale definito)dblquad integrale doppiotplquad integrale triplosimps integrazione mediante “samples”odeint integrazione di equazioni
differenziali...
NB: quad, dblquad e tplquad prendono come parametri delle funzioni.
Integrazione di base
#quad(func, infL, supL, …)#func: funzione da integrare#infL: limite inferiore#supL: limite superiore>>> x = integrate.quad(sin, 0, numpy.pi)
#La funzione restituisce una tupla con due elementi, il risultato dell'integrazione e la stima dell'errore>>> x (2.0, 2.220446049250313e-14)
Integrazione - integrate
y=∫0
π
sin(x )dx= (−cos(π))−(−cos(0)) = 2
Integrazione di base
>>> y = integrate.quad(lambda x: x**2, 0, 4)>>> y (21.333333333333336, 2.368475785867001e-13)
>>> def func(x): return x**2>>> y = integrate.quad(func, 0, 4)>>> y (21.333333333333336, 2.368475785867001e-13)
Integrazione - integrate
y=∫0
4x2dx = ∣
x3
3∣x=0
x=4
=643
−0 = 21.33333
Funzioni Statistiche - stats
Importazione>>> from scipy import stats
Funzioni principali:Principali funzioni statistiche Distribuzioni continue e discreteTest statistici….
Funzioni Statistiche - stats
Variabili aleatorieLa libreria permette di adoperare diverse decine di distribuzioni di variabili aleatorie (continue e discrete)
norm distribuzione gaussiana (o normale)
chi2 distribuzione chi-squared
t distribuzione T-student
…
Variabile Gaussiana>>> from scipy.stats import norm#definizione variabile con distribuzione normale>>> x = norm()>>> x = norm(loc=3.5, scale=2.0)#loc:media, #scale: deviazione standard
Funzioni Statistiche - stats
Variabile Gaussiana>>> y = norm(loc=5, scale=2)>>> x = numpy.linspace(-5, 5, 100) #probability density function>>> pdf = y.pdf(x)
#cumulative distribution function
>>> cdf = y.cdf(x)
Signal Processing - signal
Importazione>>> from scipy import signal
Tool per “signal and image processing”Filtraggio, trasformazioni, elaborazione di sistemi LTI etc.
Signal Processing - signal
Elaborazione di immaginiArray bidimensionali Ogni elemento equivale ad un pixel, con valore pari al livello del pixel La libreria fornisce un'immagine campione per testare gli algoritmi (lena)
>>> from scipy.misc import lena>>> image = lena()>>> plt.imshow(image, cmap=plt.cm.gray)
Signal Processing - signal
Esempio di filtraggio: filtro medianoRiduzione del rumoreOgni pixel è sostituito estraendo i valori dei pixel in un intorno (in genere nxn) del pixel in esame, li ordina in un vettore di nxn elementi e assegna al pixel il valore mediano di tale vettore>>> image = lena()>>> filtered = signal.medfilt2d(lena, [15,15])>>> imshow(filtered, cmap=cm.gray)
Signal Processing - signal
Altri esempi:Filtro di Wiener>>> ln = lena + norm(0,32).rvs(lena.shape)#inserimento rumore gaussiano nell'immagine>>> imshow(ln, cmap=cm.gray)>>> cleaned = signal.wiener(ln)>>> imshow(cleaned, cmap=cm.gray)