Introduzione a Python per il calcolo scientifico

Похожие документы
Introduzione al Calcolo Scientifico

Strumenti per l automazione del testing di applicazioni web Javascript-based

Introduzione a SciPy

Informatica 3. LEZIONE 1: Introduzione. Modulo 1: Introduzione al corso Modulo 2: Introduzione ai linguaggi di programmazione

Laboratorio Apprendimento Automatico

SciPy. Programmazione Orientata agli Oggetti e Scripting in Python

Le novità di QGIS 3 Cosa cambierà nel più utilizzato software GIS Open Source. Valerio Noti - TerreLogiche srl

Tutorato di Fondamenti di Informatica TUTOR: DAVIDE GHIANI, GIULIA ORRU

Il linguaggio di programmazione Python

Linguaggi di programmazione e astrazione

PROGRAMMA = ALGORITMO

CORSO DI PROGRAMMAZIONE ios BASE IN LINGUAGGIO NATIVO OBJECTIVE-C

Informatica ALGORITMI E LINGUAGGI DI PROGRAMMAZIONE. Francesco Tura. F. Tura

U4Learn.

Indice. Prefazione. 3 Oggetti e Java 53

Introduzione al Calcolo Scientifico

REGISTRI D'ESAME CODICE ESAME CORSO DI LAUREA NOME DEL CORSO LAUREA CFU

Laboratorio di Programmazione Lezione 1 Introduzione al corso

Una Libreria di Algebra Lineare per il Calcolo Scientifico

FREEFEM++ Marcello Bellomi. 18 Aprile Università di Verona FREEFEM++

Elementi di Base. Introduzione a Python.

Problema: dati i voti di tutti gli studenti di una classe determinare il voto medio della classe.

Modelli di programmazione parallela

Concetti di Base sulla Programmazione. Prof.Ing.S.Cavalieri

Indice Prefazione XIII Capitolo 1 Introduzione al Visual Basic per Excel

Evoluzione del FORTRAN 14/03/2016. LABORATORIO DI PROGRAMMAZIONE Corso di laurea in matematica 15 IL LINGUAGGIO FORTRAN

Introduzione alla programmazione strutturata

La formalizzazione dell informazione: Dati e Diagrammi di Flusso

Corso di Fondamenti di Informatica e Laboratorio

Programma del corso. Elementi di Programmazione. Introduzione agli algoritmi. Rappresentazione delle Informazioni. Architettura del calcolatore

Algoritmo. La programmazione. Algoritmo. Programmare. Procedimento di risoluzione di un problema

Programmazione Procedurale in Linguaggio C++

Introduzione a Matlab

Il computer. Il case e l'unità di elaborazione. Il computer, una macchina aggiornabile.

INSEGNAMENTI DEI GRUPPI PER IL CURRICULUM TEORICO La loro attivazione è definita per ogni anno accademico in sede di programmazione didattica

LabView Parte 1 IL LABVIEW LEZ_1. Corso di. Misure per la Automazione e la Qualità (Studenti Ingegneria Elettrica III anno Nuovo Ordinamento )

Università di Pisa Facoltà di Scienze Matematiche Fisiche e Naturali

Introduzione a Simulink

CORSO TRASVERSALE. SummeR School-DATA MINING AND DATA ANALYSIS WITH R

Indice generale Introduzione...vii Parte I Concetti e costrutti fondamentali... 1 Capitolo 1 Introduzione al linguaggio... 3

v.krige - coupling GRASS GIS and R for spatial interpolation

Introduzione a Matlab e Simulink

Introduzione all uso di FICO Xpress. Metodi di Ottimizzazione per la Logistica e la Produzione

Scrivere il software. Scrivere il software. Interprete. Compilatore e linker. Fondamenti di Informatica

Plotting: matplotlib & pyplot

Strutture dati e loro organizzazione. Gabriella Trucco

Java il Corso Fondamentale

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

INTRODUZIONE ALLA PROGRAMMAZIONE AD ALTO LIVELLO IL LINGUAGGIO JAVA. Fondamenti di Informatica - Programma

Il calcolatore. Architettura di un calcolatore (Hardware)

MATERIALI PER LA DISCUSSIONE

Model-Based-Design in F1

Транскрипт:

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