Introduction à Python pour la programmation scientifique

Transcription

Introduction à Python pour la programmation scientifique
Introduction à Python pour
la programmation
scientifique
Sophie Bouffiès-Cloché, Marc-Antoine Drouin,
Dmitry Khvorostyanov, Estelle Lorant,
Vincent Noel, Jean-Yves Peterschmitt, LMD, IPSL/CNRS-X-ENS-UPMC
Journée de formation IPSL – 2014-12-02
Ecole Polytechnique, Palaiseau, France
III. Python pour la
science :
outils et librairies
1. IPython
L'interpréteur Python de base est un peu limité
pas de cd, ls, rappels de lignes, etc.
IPython : un interpréteur Python amélioré
•
•







complète les commandes, fichiers/dossiers avec Tab
aide intégrée : help(plot)
affichage numérique et graphique interactif (cf la suite)
raccourcis à la Matlab : cd, ls, pwd, !mkdir, who
ça serait dommage de ne pas s'en servir
v2.3 cette année ! (notebooks etc)
http://ipython.org
• Astuce : ^d pour quitter
2. Modules Scientifiques
Deux modules importants
numpy
matplotlib
•
•
Et quelques autres
scipy
netCDF4
Basemap
•
•
•
2.1 numpy
Python standard :
• Ne fait pas les opérations sur les éléments de la liste
• Listes limitées à 1 dimension
• Calculs par boucles, lents
• Peu adapté au travail scientifique
2.1 numpy
• depuis 1995, suite de Numeric/numarray, aujourd’hui à v.1.9
• type "tableau de type fixe" à n dimensions
o x = array([0, 1, 2, 3])
o ou x = r_[0, 1, 2, 3], x = r_[0:4]
o optimisé pour manipulations numériques
o très rapide
• scipy, matplotlib, netCDF, HDF... parlent numpy
2.1 numpy
• Interactif : ipython –pylab importe tout numpy
• Dans les scripts : import numpy as np
2.1 numpy
On indexe numpy comme une liste à n dimensions.
• x = r_[0:2:0.01]
• x[0], x[50:], x[:-10]
• x[:,:,:,3]
• x[x < 3] = 0
# transpose
• x=x.T
• x=a*b
2.1 numpy : manipulation de
tableaux
np.zeros([d1,d2,...])
np.ones([d1,d2,...])
tableaux de 0 ou 1 de dimensions d1,d2...
a1.shape
a1.reshape([...])
Dimensions du tableau a1
redimensionne le tableau a1
np.concatenate(
[a1,a2,...],axis=n)
Concatène des tableaux le long de la dimension n
np.mean(a1), np.std(a1) moyenne, écart-type, min et max du tableau a1
np.min(a1), np.max(a1) axis=n travaille le long de la dimension n
np.sin(), np.cos(), np.tan(), np.transpose(), np.flipud(),
np.tile()...
2.1 numpy sait faire autre chose
• Lecture/écriture simples
o np.loadtxt(), np.savetxt() : ASCII
o np.load(), np.save(): format numpy pour fichiers temporaires
• Interpolation
o np.interp()
• Histogrammes à 1, 2, n dimensions
o np.histogram(), np.histogram2d(), np.histogramdd()
• Masked arrays
o np.ma
2.2 Matplotlib
• Beaucoup de modules Python pour faire des plots
o PyNGL, Chaco, Veusz, gnuplot, Rpy, Pychart...
• Matplotlib émerge comme un "standard"
o "all-purpose" plot package, interactif ou publication-ready
 EPS, PNG, TIFF
o forte interaction avec numpy, scipy
o extensible, populaire, stable
o "Matplotlib tries to make easy things easy and hard things
possible"
o utilisation "matlab-like" ou orientée objet
2.2 Matplotlib et Matlab
• matplotlib.pyplot : commandes proche de Matlab
•
•
o plot, semilogx, semilogy, pcolor (shading
flat), xlabel, ylabel, title, legend, hist,
figure, axis, subplot, contour, colorbar,
quiver, axes, xlim, ylim, xticks, yticks...
interactif : ipython –pylab importe pyplot
scripts : import matplotlib.pyplot as plt
2.2 Matplotlib : exemples (1)
• Séries Temporelles simples
plt.plot(time, y)
Python et matplotlib
comprennent les dates
Matplotlib comprend Latex
plt.plot(x, y)
xlabel('time (s)')
2.2 Matplotlib : exemples (2)
• Séries temporelles de profils verticaux de vent
2.2 Matplotlib : exemples (3)
• Contours avec labels
2.2 Matplotlib : exemples (4)
• Histogrammes
plt.hist()
2.2 Matplotlib : exemples (5)
• time-range plot (pcolor en matlab) avec colorbar
plt.pcolor(time, z, pr2)
plt.colorbar()
2.2 Matplotlib : exemples
• 3D plots (mplot3d Toolkit)
2.2 Matplotlib : etc.
http://matplotlib.org/gallery.html
2.2 Matplotlib : Basemap
• from mpl_toolkits import
• projections : (x, y) <-> (lon, lat)
o plots
o cartes
o contours
o cotes, frontières, géodésie
basemap
2.2 Matplotlib+Basemap : exemple
(1)
2.2 Matplotlib+Basemap: exemple (2)
2.3 scipy
• fonctions mathématiques spécialisées
par thèmes dans des sous-modules
• regroupées
o
o
o
o
o
o
o
o
ndimage - multi-dimensional image processing
stats - statistiques
io - lecture/écriture (netCDF3, ASCII, Matlab)
signal - signal processing
interpolate - interpolations n-dimensions linéaires, cubiques, quadratiques,
splines et autres
linsolve, odeint - linear equation / ordinary differential equations solvers
fftpack - transformees de Fourier
integrate...
•Impossible de tout couvrir, Google is your friend
2.4 netcdf4-python
• netCDF 3 ou 4
• PyNIO, scipy.io, pycdf... marchent aussi
• Variables netCDF comme des variables Python
import netCDF4
nc = netCDF4.Dataset('test.nc')
lon = nc.variables[‘longitude’]
print lon.units
Print lon[:], nc.variables[‘latitude’][:]
All together now
#!/usr/bin/env python
import numpy as np
import matplotlib.pyplot as plt
import netCDF4
from mpl_toolkits.basemap import Basemap
nc = netCDF4.Dataset('geo_em.d01.nc')
lat = nc.variables['XLAT_M'][0,:,:]
lon = nc.variables['XLONG_M'][0,:,:]
hgt = nc.variables['HGT_M'][0,:,:]
m = Basemap(projection='lcc',lat_0=-70,lon_0=-60,
width=3000*1000,height=3000*1000)
x, y = m(lon, lat)
m.pcolor(x, y, hgt)
m.drawmapboundary()
m.drawmeridians(color='grey')
m.drawparallels(color='grey')
m.drawcoastlines(color='grey')
plt.colorbar().set_label('Elevation [m]')
plt.savefig('example_basemap.png')
18 lignes de Python
pour rire : essayer de faire la même chose en Fortran
Autres modules
• pyhdf - lecture/écriture HDF4
• pyh5, PyTables - lecture/écriture HDF5
• PyNIO - lecture/écriture GRIB1 et 2, HDFEOS
• PyWavelets - transformées en ondelettes
• shapely - géométrie planaire
• GIS-Python - geographic information systems
• SymPy - calcul symbolique à la Mathematica/Maple
• PyClimate - analyses de series climatiques
• ...
Pour aller plus loin
Google : Python, science,
numpy, matplotlib, tutorials...
Bouquins (souvent en anglais,
mais pas toujours)
•
•
•
Merci pour votre attention
Questions ?

Documents pareils

Introduction a Python pour la programmation scientifique

Introduction a Python pour la programmation scientifique Beaucoup de modules Python pour faire des plots PyNGL, Chaco, Veusz, gnuplot, Rpy, Pychart...

Plus en détail

Python pour les mathématiques numériques et l

Python pour les mathématiques numériques et l •  Matrices aléatoires avec from numpy.random import * : rand(size), randn(size), normal(mean,stdev,size), uniform(low,high,size), randint(low,high,size) L. Risser

Plus en détail

NumPy - Python pour le calcul scientifique

NumPy - Python pour le calcul scientifique Le module incontournable du calcul scientifique avec Python. Héritier de Numeric et Numarray. Classes de base pour SciPy. S’installe comme un module Python standard. Contient les fonctions de manip...

Plus en détail

Introduction à Python

Introduction à Python import paquet.souspaquet #importation du souspaquet se trouvant #dans un sous-répertoire de paquet

Plus en détail

Bien démarrer en Numpy/Scipy/Matplotlib

Bien démarrer en Numpy/Scipy/Matplotlib Table des matières 1 Introduction 1.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Importer les modules Numpy/Scipy/Matplotlib . . . . . . . . ...

Plus en détail