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 ASTROLIB et PyFITS (Space Telescope Science Institute) Eléments finis FiPy (NIST) Neurologie Visualisation Vision Egg (Collaboration internationale) MayaVi (Prabhu Ramachandran) Bioinformatique BioPython (Collaboration internationale) Statistique Modular toolkit for Data Processing (Humboldt- Universität) Systèmes dynamiques SimPy (Collaboration internationale) Géographie Thuban (Intevation GmbH) 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 Interface Python Interface Python Interface Python Bibliothèque Fortran 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++ Module C Fonction 1 Fonction 2 Fonction 3 Classe 1 Classe 2 Classe 3 Python Interface 1 Interface 2 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 Module 1 Module 2 Module 3 Bibliothèque Python Module 1 Module 2 Module 3 Bibliothèque Python Module 1 Module 2 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