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