Introduzione a Python per il calcolo scientifico Ma ia Penati 23 gennaio 2014
Python Python è un linguaggio di programmazione dinamico orientato agli ogge i >>> import t h i s The Zen o f Python, by Tim P e t e r s B e a u t i f u l i s b e t t e r than ugly E x p l i c i t i s b e t t e r than i m p l i c i t Simple i s b e t t e r than complex Complex i s b e t t e r than c o m p l i c a t e d F l a t i s b e t t e r than n e s t e d S p a r s e i s b e t t e r than dense R e a d a b i l i t y counts
Algoritmo di Floyd-Warshall l e t d i s t be a V V a r r a y o f minimum d i s t a n c e s i n i t i a l i z e d to f o r each v e r t e x v d i s t [ v ] [ v ] 0 f o r each edge ( u, v ) d i s t [ u ] [ v ] w( u, v ) f o r k from 1 to V f o r i from 1 to V f o r j from 1 to V i f d i s t [ i ] [ k ] + d i s t [ k ] [ j ] < d i s t [ i ] [ j ] then d i s t [ i ] [ j ] d i s t [ i ] [ k ] + d i s t [ k ] [ j ]
Algoritmo di Floyd-Warshall def f l o y d _ w a r s h a l l ( V, E, weights ) : i n f = f l o a t ( I n f ) d i s t = [ [ i n f for u in V] for v in V] for i in range ( len ( V ) ) : d i s t [ i ] [ i ] = 0 for e, w in zip ( E, w ) : u, v = e d i s t [ u ] [ v ] = w for k in range ( len ( V ) ) : for i in range ( len ( V ) ) : for j in range ( len ( V ) ) : i f d i s t [ i ] [ k ] + d i s t [ k ] [ j ] < d i s t [ i ] [ j ] : d i s t [ i ] [ j ] = d i s t [ i ] [ k ] + d i s t [ k ] [ j ]
Python history 1991 Van Rossum rilascia i sorgenti della versione 090 1994 Viene rilasciata la versione 10 1995 Prima implementazione di numpy (Numeric) 2000 Viene rilasciata la versione 20 2001 Viene rilasciato SciPy 10 2006 Viene rilasciato NumPy 10 2008 Viene rilasciata la versione 30 Iniziano le conferenze SciPy e EuroSciPy
Python sfru a a pieno le potenzialità di un vero linguaggio di programmazione Python ha i namespaces è possibile sviluppare un intera applicazione con lo stesso linguaggio di programmazione, dall interfaccia alla logica, grazie al gran numero di librerie esistenti
Python sfru a a pieno le potenzialità di un vero linguaggio di programmazione Python ha i namespaces è possibile sviluppare un intera applicazione con lo stesso linguaggio di programmazione, dall interfaccia alla logica, grazie al gran numero di librerie esistenti MATLAB possiede un gran numero di funzioni testate e efficienti Simulink oltre ad essere utilizzato nelle università è utilizzato anche in ambito lavorativo
NumPy NumPy è il pacche o base per il calcolo scientifico con Python gestione degli array N-dimensionali integrazione con C, C++ e Fortran funzioni di base di algebra lineare
Gli array di Numpy Cos è un array per NumPy? typedef s t r u c t PyArrayObject { char * data ; i n t nd ; npy_intp * dimensions ; npy_intp * s t r i d e s ; PyArray_Descr * d e s c r ; } PyArrayObject ; Blocco di memoria contiene i dati in formato grezzo Schema di accesso traduce gli indici in un indirizzo di memoria Descri ore di tipo perme e di interpretare i dati
Gli array di Numpy >>> import numpy as np >>> A = np z e r o s ( ( 2, 2 ) ) >>> A a r r a y ( [ [ 0, 0 ], [ 0, 0 ] ] )
Gli array di Numpy >>> import numpy as np >>> A = np z e r o s ( ( 2, 2 ) ) >>> A a r r a y ( [ [ 0, 0 ], [ 0, 0 ] ] ) >>> B = A [ 0, : ] >>> B a r r a y ( [ 0, 0 ] )
Gli array di Numpy >>> import numpy as np >>> A = np z e r o s ( ( 2, 2 ) ) >>> A a r r a y ( [ [ 0, 0 ], [ 0, 0 ] ] ) >>> B = A [ 0, : ] >>> B a r r a y ( [ 0, 0 ] ) >>> B [ 0 ] = 1 >>> B a r r a y ( [ 1, 0 ] )
Gli array di Numpy >>> import numpy as np >>> A = np z e r o s ( ( 2, 2 ) ) >>> A a r r a y ( [ [ 0, 0 ], [ 0, 0 ] ] ) >>> B = A [ 0, : ] >>> B a r r a y ( [ 0, 0 ] ) >>> B [ 0 ] = 1 >>> B a r r a y ( [ 1, 0 ] ) >>> A a r r a y ( [ [ 1, 0 ], [ 0, 0 ] ] )
Differenze con MATLAB tu e le operazioni algebriche tra gli array di NumPy sono element-wise A * B A * B dot ( A, B ) A * B Python è zero-based A ( 1 : 5, : ) A ( end 4: end, : ) A ( 3 : 2 : 2 1, : ) A [ 0 : 5, : ] A [ 5 :, : ] A [ 2 : 2 1 : 2, : ] gli array di NumPy vengono passati per referenza e gli slice sono delle viste
SciPy SciPy è una collezione di algoritmi e funzioni basato su NumPy funzioni speciali (scipy special ) quadratura numerica e ODE (scipy integrate ) o imizzazione (scipy optimize) interpolazione (scipy interpolate ) trasformata di Fourier (scipy fftpack) elaborazione dei segnali (scipy signal) algebra lineare (scipy linalg ) statistica (scipy stats) I/O (scipy io)
SciPy Il pacche o scipy weave perme e di includere codice C e C++ dire amente nello script Python, rendendo molto semplice l o imizzazione di alcune parti di codice, senza dover scrivere un estensione
SciPy Il pacche o scipy weave perme e di includere codice C e C++ dire amente nello script Python, rendendo molto semplice l o imizzazione di alcune parti di codice, senza dover scrivere un estensione u [1: 1,1: 1] = ( ( u [0: 2,1: 1] + u [ 2 :, 1 : 1 ] ) * dy2 + ( u [1: 1,0: 2] + u [ 1 : 1, 2 : ] ) * dx2 ) * d n r _ i n v
SciPy Il pacche o scipy weave perme e di includere codice C e C++ dire amente nello script Python, rendendo molto semplice l o imizzazione di alcune parti di codice, senza dover scrivere un estensione u [1: 1,1: 1] = ( ( u [0: 2,1: 1] + u [ 2 :, 1 : 1 ] ) * dy2 + ( u [1: 1,0: 2] + u [ 1 : 1, 2 : ] ) * dx2 ) * d n r _ i n v expr = u [1: 1,1: 1] = ( ( u [0: 2,1: 1] + u [ 2 :, 1 : 1 ] ) * dy2 + \ ( u [1: 1,0: 2] + u [ 1 : 1, 2 : ] ) * dx2 ) * d n r _ i n v weave b l i t z ( expr, c h e c k _ s i z e = 0 )
SciPy Il pacche o scipy weave perme e di includere codice C e C++ dire amente nello script Python, rendendo molto semplice l o imizzazione di alcune parti di codice, senza dover scrivere un estensione u [1: 1,1: 1] = ( ( u [0: 2,1: 1] + u [ 2 :, 1 : 1 ] ) * dy2 + ( u [1: 1,0: 2] + u [ 1 : 1, 2 : ] ) * dx2 ) * d n r _ i n v expr = u [1: 1,1: 1] = ( ( u [0: 2,1: 1] + u [ 2 :, 1 : 1 ] ) * dy2 + \ ( u [1: 1,0: 2] + u [ 1 : 1, 2 : ] ) * dx2 ) * d n r _ i n v weave b l i t z ( expr, c h e c k _ s i z e = 0 ) La versione in Python viene eseguita in 10s, quella scri a con il paccheto Weave in 3s, invece la versione nativa scri a in C in 1s
Cython Cython è un compilatore per Python e Cython, perme e scrivere estensioni in C con la stessa facilità con cui si scrive in Python chiamare funzioni native in ogni punto del codice, aumentare le performance del codice introducendo la dichiarazione di tipo, integrare in modo semplice codice già esistente
Cython Cython è un compilatore per Python e Cython, perme e scrivere estensioni in C con la stessa facilità con cui si scrive in Python chiamare funzioni native in ogni punto del codice, aumentare le performance del codice introducendo la dichiarazione di tipo, integrare in modo semplice codice già esistente import numpy as np def n a i v e _ c o n v o l v e ( f, g ) :
Cython Cython è un compilatore per Python e Cython, perme e scrivere estensioni in C con la stessa facilità con cui si scrive in Python chiamare funzioni native in ogni punto del codice, aumentare le performance del codice introducendo la dichiarazione di tipo, integrare in modo semplice codice già esistente import numpy as np def n a i v e _ c o n v o l v e ( f, g ) : import numpy as np cimport numpy as np def n a i v e _ c o n v o l v e ( np ndarray f, np ndarray g ) :
Matplotlib Matplotlib è una libreria per la creazione di grafici 2D e 3D
perme e di includere grafici nelle applicazioni (wx, Qt, GTK) creazione di script per il postprocessing automatico dei dati importa dati da una grande varietà di fonti, anche Excel esporta in qualsiasi formato grafico ve oriale o raster anch esso è basato su NumPy
>>> import numpy as np >>> import m a t p l o t l i b p y p l o t as p l t >>> x = np l i n s p a c e ( 0, 2 * np pi, 1 0 0 0 ) >>> y = np s i n ( x ) >>> p l t p l o t ( x, y ) [ < m a t p l o t l i b l i n e s Line2D object at 0 x10744c150 >] >>> p l t show ( )
alche libreria avanzata VTK È una libreria open-source per la grafica 3D, elaborazione di immagini e visualizzazione Sandia è tra i principali sviluppatori del proge o Trilinos È un proge o che raccoglie diverse librerie utilizzate per lo sviluppo di risolutori per problemi ingegneristici e scientifici PETSc È una suite di stru ure dati e algoritmi per lo sviluppo di applicazioni scientifiche Dal proge o PETSc sono nati i proge i: mpi4py, petsc4py, slepc4py, tao4py
FEniCS FEniCS è un proge o che ha l obie ivo di sviluppare strumenti innovativi per la risoluzione dei problemi differenziali con il metodo degli elementi finiti
FEniCS FEniCS è un proge o che ha l obie ivo di sviluppare strumenti innovativi per la risoluzione dei problemi differenziali con il metodo degli elementi finiti u v dx = fv dx v V Ω u = T r i a l F u n c t i o n ( V ) v = T e s t F u n c t i o n ( V ) } {{ } a(u,v) Ω }{{} L(v) a = dot ( grad ( u ), L = f * v * dx grad ( v ) ) * dx http://fenicsprojectorg/
FEniCS L obie ivo è creare strumenti che automatizzino parte dello sviluppo di un codice a elementi finiti: y n: generazione automatica delle funzioni di base valutazione automatica delle forme variazionali assemblaggio automatico delle stru ure controllo automatico dell ada ività di griglia =f tr (v) I (rv) > ) ) = u(x)
Enthought Python Distribution La distribuzione EPD è un ambiente autocontenuto che contiene al suo interno tu i gli strumenti necessari per lo sviluppo di applicazioni tecniche in Python è multipia aforma (Linux/MacOSX/Windows) per l utilizzo accademico è completamente gratuito contiene al suo interno più di 100 librerie (NumPy, SciPy, ) sponsorizzano il proge o SciPy https://wwwenthoughtcom
Anaconda Come EPD è un ambiente autocontenuto per lo sviluppo di applicazione per il calcolo scientifico in Python è multipia aforma (Linux/MacOSX/Windows) per l utilizzo accademico è completamente gratuito contiene al suo interno più di 100 librerie (NumPy, SciPy, ) perme e di switchare rapidamente tra diverse versioni dell interprete include o imizzazioni multi-core e GPU http://continuumio/
Installazione in ambienti Unix Il modo più intelligente di installare queste librerie in un ambiente Unix è utilizzare virtualenv e a s y _ i n s t a l l pip pip i n s t a l l v i r t u a l e n v pip i n s t a l l v i r t u a l e n v w r a p p e r Configurate l ambiente con lo script virtualenvwrapper sh m k v i r t u a l e n v s c i p y pip i n s t a l l numpy pip i n s t a l l s c i p y pip i n s t a l l m a t p l o t l i b pip i n s t a l l ipython