18
SciPy Programmazione Orientata agli Oggetti e Scripting in Python

SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

  • Upload
    dangnhu

  • View
    230

  • Download
    0

Embed Size (px)

Citation preview

Page 1: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

SciPy

Programmazione Orientata agli Oggettie

Scripting in Python

Page 2: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 3: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 4: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 5: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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...

Page 6: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 7: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 8: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 9: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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.

Page 10: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 11: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 12: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

Funzioni Statistiche - stats

Importazione>>> from scipy import stats

Funzioni principali:Principali funzioni statistiche Distribuzioni continue e discreteTest statistici….

Page 13: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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

Page 14: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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)

Page 15: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

Signal Processing - signal

Importazione>>> from scipy import signal

Tool per “signal and image processing”Filtraggio, trasformazioni, elaborazione di sistemi LTI etc.

Page 16: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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)

Page 17: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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)

Page 18: SciPy - people.unica.it - Università di Cagliaripeople.unica.it/giulianoarmano/files/2013/06/scipy1.pdf · Signal Processing - signal Elaborazione di immagini Array bidimensionali

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)