Support de la présentation

publicité
NumPy et al.
Le calcul Scientifique
en PYTHON
Konrad HINSEN
Centre de Biophysique Moléculaire (Orléans)
et
Synchrotron Soleil (St Aubin)
Python et le logiciel libre
Python est un logiciel libre.
NumPy est un logiciel libre.
La quasi-totalité des bibliothèques scientifiques
en Python sont des logiciels libres.
La transition du propriétaire au libre est
l’occasion de faire le point sur ses besoins et ses
priorités, ce qui fait que beaucoup de
scientifiques migrent de Matlab vers l’univers
Python.
Pourquoi Python ?
▹ Travail interactif
□Développement rapide
□Développement incrémentiel
□Test, débogage
□Analyse interactif de données
Pourquoi Python ?
▹ Travail interactif
▹ Simplicité du langage
□Syntaxe claire et nette
□Gestion automatique de la mémoire
□Tout est dynamique,
il n’y a rien à déclarer
Pourquoi Python ?
▹ Travail interactif
▹ Simplicité du langage
▹ Orientation objet
□Structuration du programme en
unités qui représentent un aspect
du problème à résoudre
□Facilite les modifications et
les extensions
Pourquoi Python ?
▹ Travail interactif
▹ Simplicité du langage
▹ Orientation objet
▹ Ouverture au monde
□Facile à interfacer avec le C/C++
et le Fortran
□Facile à interfacer avec d’autres
programmes
□Excellente portabilité
Pourquoi Python ?
▹ Travail interactif
▹ Simplicité du langage
▹ Orientation objet
▹ Ouverture au monde
▹ Disponibilité de bibliothèques
□Calcul scientifique
□Lecture/écriture de données
□Internet
□Interfaces graphiques
□...
Une brève historique
1991: Python est publié
1994: premières applications scientifiques
1996: Numerical Python (devient NumPy en 2006)
.
.
.
2010:- un grand choix de bibliothèques
- deux colloques annuels: SciPy, EuroSciPy
- premier livre épuisé au bout de deux mois
- enseigné à plusieurs universités
- des entreprises spécialisées
Quelques applications
Astronomie
Neurologie
ASTROLIB
et PyFITS
Vision Egg
(Space Telescope
Science Institute)
(Collaboration
BioPython
internationale) (Collaboration internationale)
Visualisation
Eléments finis
Statistique
MayaVi
(Prabhu
Ramachandran)
FiPy
(NIST)
Systèmes dynamiques
SimPy
Bioinformatique
(Collaboration
internationale)
Géographie
Thuban
(Intevation
GmbH)
Modular toolkit for
Data Processing
(HumboldtUniversität)
Mathématiques
SAGE
(University of
Washington)
Python ou langage matriciel?
Python:
●langage généraliste avec des bibliothèques
pour le calcul scientifique
+champ d’application plus vaste
- notation plus compliquée pour les matrices
Matlab, Scilab, IDL, R, ...:
●langages optimisés pour le traitement des matrices
+syntaxe optimisé pour les matrices
- moins adaptés aux tâches non-matriciels
Scénarios
d’usage
Langage de script
Langage de script
▹ Lire/écrire des fichiers
➥ perl, awk, grep, vi, emacs, ...
Langage de script
▹ Lire/écrire des fichiers
➥ perl, awk, grep, vi, emacs, ...
▹ Analyse de données, visualisation
➥ Matlab/Scilab/Octave, IDL, R
Langage de script
▹ Lire/écrire des fichiers
➥ perl, awk, grep, vi, emacs, ...
▹ Analyse de données, visualisation
➥ Matlab/Scilab/Octave, IDL, R
▹ Gestion de tâches de calcul
➥ sh/bash, csh
Langage de script
▹ Lire/écrire des fichiers
➥ perl, awk, grep, vi, emacs, ...
▹ Analyse de données, visualisation
➥ Matlab/Scilab/Octave, IDL, R
▹ Gestion de tâches de calcul
➥ sh/bash, csh
▹ Administration système
➥ sh/bash, csh, grep, awk, perl, ...
Langage de script
▹ Lire/écrire des fichiers
➥ perl, awk, grep, vi, emacs, ...
▹ Analyse de données, visualisation
➥ Matlab/Scilab/Octave, IDL, R
▹ Gestion de tâches de calcul
➥ sh/bash, csh
▹ Administration système
➥ sh/bash, csh, grep, awk, perl, ...
Avantages de Python:
☺ vrai langage de programmation
☺ bibliothèques utiles de qualité
Calcul exploratoire
▹ Analyse de données
▹ Visualisation
➥Scripts simples et travail interactif
Outils pratiques:
→IPython
→Emacs + Python mode
→matplotlib
→VPython
→Module pickle
Langage d’intégration
Scripts Python
Interface
Python
Bibliothèque
Fortran
Interface
Python
Interface
Python
Interface
Python
Bibliothèque
C
Routines de
programmes
existants
Programmes
compilés
Outils: swig, boost, f2py, PyFort, Pyrex/Cython
Langage de script intégré
Interface graphique
Module C++
Classe 1
Module C
Fonction 1
Classe 2
Classe 3
Python
Interface 1
Fonction 2
Interface 2
Fonction 3
Interface 3
Langage principal
Programme principal
Module
Python
Module
Python
Module
Pyrex
Module
Python
Optimisation
Module
C
Pensez Bibliothèques !
Programme principal
Bibliothèque
Python
Bibliothèque
Python
Bibliothèque
Python
Module 1
Module 1
Module 1
Module 2
Module 2
Module 2
Module 3
Module 3
Module 3
Une bibliothèque est plus utile que des
routines cachées dans un programme !
bibiliothèques
scientifiques
généralistes
NumPy
Fonctionnalité de base pour le calcul numérique:
▹ Tableaux multidimensionnels
▹ Arithmétique et fonctions mathématiques
sur les tableaux
▹ Algèbre linéaire (LAPACK)
▹ Transformée de Fourier (FFTPACK)
▹ Nombres aléatoires
➥Implémentation efficace qui rend possible le calcul
numérique en Python pur. Utilisé par la majorité
des bibliothèques scientifiques.
Tableaux
▹ multidimensionnels
▹ tous les élements du même type (entier, réel, ...)
▹ stockage compact des données,
compatible C/Fortran
▹ opérations efficaces
▹ arithmétique
▹ indexation flexible
➥Les tableaux NumPy servent autant pour écrire des
algorithmes matriciels que pour interfacer avec des
bibliothèques en C/C++/Fortran.
Un petit exemple
import numpy as N
from numpy.linalg import lstsq
def fitPolynome(ordre, x, y):
m = x[:, N.newaxis] ** N.arange(ordre+1)[N.newaxis, :]
a = lstsq(m, y)[0]
polynome = N.dot(m, a)
return a, polynome
coefficients, polynome_fitte = fitPolynome(10, x, h)
N.arange(n): [0, 1, 2, 3, ..., (n-1)]
N.dot(a, b): produit matrice-matrice ou matrice-vecteur
x[:, N.newaxis]:rajoute une dimension au tableau x
matplotlib
Bibliothèque de traçage
▹ Plots 2D
▹ Plots 3D avec l’extension mplot3d
▹ autres (camembert, ...)
▹ affichage à l’écran, EPS, PDF, ...
▹ peut être intégré dans un interface graphique
Le module pylab de matplotlib facilite
la transition pour les habitués de Matlab.
ScientificPython
Modules Python d’intérêt général:
▹ Géométrie
vecteurs, tenseurs, transformations linéaires
▹ Fonctions
interpolation, dérivés automatiques, polynômes, fonctions rationnelles
▹ Statistique
moments d’une distribution, histogramme
▹ Fits
moindres carrés linéaire et non-linéaire
▹ Unités
conversion, arithmétique
▹ Visualisation
VRML, VPython, VMD
▹ Parallélisme
calcul distribué, BSP, interface MPI
▹ Entrées-Sorties
formatage compatible Fortran, tableaux, netCDF, PDB
SciPy
Interfaces à des nombreuses bibliothèques scientifiques:
▹ Statistique
▹ Optimisation
▹ Intégration numérique
▹ Algèbre linéaire
▹ Transformés de Fourier
▹ Traitement du signal
▹ Traitement d’images
▹ Algorithmes génétiques
▹ Équations différentielles partielles
▹ Fonctions spéciales
SymPy
Bibliothèque pour le calcul symbolique en Python
▹ Transformations algébriques
▹ Analyse: limite, dérivation, intégration, séries
▹ Equations différentielles et algébrique
▹ Algèbre linéaire
Pour continuer...
Hans-Petter Langtangen
Python Scripting for Computational Science
Springer, 2005/2006
Matthieu Brucher
Python, Les fondamentaux du langage,
La programmation pour les scientifiques
Editions ENI, 2008
Computing in Science and Engineering
Special Issue “Python: Batteries included”
May/June 2007
Téléchargement