SciPy Programmazione Orientata agli Oggetti e 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 SciPy: Informazioni di Base Estensioni offerte: scipy.constants: costanti matematiche e fisiche scipy.special: funzioni in uso in fisica matematica (ellittiche, Bessel, ipergeometriche) scipy.integrate: metodi di integrazione numerica e integrazione di equazioni differenziali scipy.optimize: metodi di ottimizzazione (minimi quadrati, gradiente, simulated annealing) scipy.linalg: estensione di numpy.linalg. Soluzione di sistemi lineari, calcolo matriciale, decomposizione, fattorizzazione scipy.sparse: gestione di matrici sparse SciPy: Informazioni di Base Estensioni offerte: scipy.interpolate: metodi per l'interpolazione lineare e non di dati scipy.fftpack: Fast Fourier Transform scipy.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 Algebra Lineare - linalg Importazione >>> from scipy import linalg Funzioni principali: Funzioni di base: inv, solve, det, norm, lstsq, pinv Funzioni di decomposizione: eig, lu, svd, orth, cholesky, qr, schur Funzioni di calcolo matriciale: expm, logm, sqrtm, cosm, coshm ... Algebra Lineare - linalg 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.]]) Integrazione - integrate Importazione >>> from scipy import integrate Funzioni principali: quad integrazione di base (integrale definito) dblquad integrale doppio tplquad integrale triplo simps integrazione mediante “samples” odeint integrazione di equazioni differenziali ... NB: quad, dblquad e tplquad prendono come parametri delle funzioni. Integrazione - integrate Integrazione di base π y =∫0 sin( x )dx = (−cos(π))−(−cos(0)) = 2 #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 Integrazione di base 3 x=4 x 64 2 y =∫0 x dx = ∣ ∣ = −0 = 21.33333 3 x=0 3 4 >>> 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) Funzioni Statistiche - stats Importazione >>> from scipy import stats Funzioni principali: Principali funzioni statistiche Distribuzioni continue e discrete Test statistici …. Funzioni Statistiche - stats Variabili aleatorie La 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 immagini Array 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 mediano Riduzione del rumore Ogni 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)