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)