18
Initiation à la programmation en Python Romain Brette 11 mars 2009

CoursPython

Embed Size (px)

DESCRIPTION

CoursPython

Citation preview

Page 1: CoursPython

Initiation à la programmation en

Python

Romain Brette

11 mars 2009

Page 2: CoursPython

Calcul scientifique: SciPy et Pylab

� SciPy = bibliothèque scientifique

� Pylab = bibliothèque graphique

� Utilisation:

≈ Matlab

from scipy import *

Documentation:

http://docs.scipy.org/doc/

http://matplotlib.sourceforge.net/ (voir la gallerie d’exemples)

http://mathesaurus.sourceforge.net/matlab-numpy.html

from scipy import *

from pylab import *

Page 3: CoursPython

SciPySciPy

Page 4: CoursPython

Vecteurs et matrices

� Type de base défini par SciPy: array(= vecteur ou matrice)

from scipy import *

x=array([1,2,3])

M=array([[1,2,3],[4,5,6]])

vecteur (1,2,3)

matrice1 2 3

4 5 61 1M=ones((3,2))

z=2*x+1

y=dot(M,x)

4 5 6

matrice1 1

1 1

1 1

produit matriciel

Page 5: CoursPython

Opérations

x+y

x-y

x*y

x/y

x**2

exp(x)

sqrt(x)

élément par élément

dot(x,y)

dot(M,x)

M.T

M.max()

M.sum()

size(x)

M.shape

produit scalaire

produit matriciel

transposition

maximum

somme

nombre total d’éléments

Page 6: CoursPython

Indexation

x[i]

M[i,j]

x[i:j]

M[i,:]

M[:,i]

x[[1,3]]

Indexation des vecteurs ≈ listes (premier élément = 0)

(i+1)e élement

tranche de x[i] à x[j-1](i+1)e ligne(i+1)e colonneéléments x[1] et x[3]

x[1:3]=[0,1]

M[1,:]+=xx[1]=0, x[3]=1ajouter le vecteur x à la 2e ligne de M

M[i,:] est une « vue » sur la matrice M ≠ copie (≈ référence)

y=M[0,:]

y[2]=5

x=z

x[1]=3

M[0,2] vaut 5

z[1] vaut 3 x=z.copy()copie:

Page 7: CoursPython

Construction

x=array([1,2,3])

M=array([[1,2,3],[4,5,6]])

x=ones(5)

M=zeros((3,2))

M=eye(3)

M=diag([1,3,7])

à partir de listes

vecteur de 1matrice nullematrice identitématrice diagonale

x=rand(5)

x=randn(5)

x=arange(10)

x=linspace(0,1,100)

vecteur aléatoire dans [0,1]vecteur aléatoire gaussien

0,1,2,...,9

100 nombres entre 0 et 1

Page 8: CoursPython

Vecteurs booléens

x=array([1,2,3,4])

x>2.5

A(B)

x[x>2.5]+=1

M=rand(3,3)

[False, False, True, True]

ajoute 1 à chaque élément > 2.5

= tous les aij tels que bij est True

M=rand(3,3)

i,j=where(M>.5)

i=where(x>2.5)[0]

indices (ligne, colonne) des éléments > .5

indices des éléments > 2.5

Page 9: CoursPython

Algèbre linéaire

from scipy import linalg

help(linalg)

d=linalg.det(M)

liste des fonctions

Quelques fonctions:

detdet

norm

lstsq

solve

eigvals

lu

...

Page 10: CoursPython

Bibliothèque scientifique

import scipy

help(scipy) liste des modules de SciPy

Exemple: optimisation (scipy.optimize)

from scipy import optimize

def f(x):def f(x):

return (x-1)*(x-3)

print optimize.fsolve(f,0)

point initial

résout f(x)=0

Page 11: CoursPython

Vectorisation

� Comment écrire des programmes efficaces?

� Remplacer les boucles par des opérations vectorielles

for i in range(1000000):

X[i]=1

X=ones(1000000)

for i in range(1000000): X=X*2for i in range(1000000):

X[i]=X[i]*2

X=X*2

for i in range(999999):

Y[i]=X[i+1]-X[i]

Y=X[1:]-X[:-1]

for i in range(1000000):

if X[i]>0.5:

Y[i]=1

Y[X>.5]=1

Page 12: CoursPython

PylabPylab

Page 13: CoursPython

Pylab

from pylab import *

plot([1,2,3],[4,5,6])

show()

import pylab

help(pylab)

x y

affiche la figure

plus d’exemples:http://matplotlib.sourceforge.net/gallery.html

plot(x,y,’r’)

plot(x,y,’.’)

xlabel(’Temps (ms)’)

figure()

subplot(211)

plot(x,y)

subplot(212)

plot(u,v)

en rouge

avec des points (pas de lignes)

nouvelle figuresous-figure

211

2122 lig

nes

1 colonne

légende pour l’axe horizontal

Page 14: CoursPython

ExercicesExercices

Page 15: CoursPython

Exercice 1 – Analyse de notes

� Ecrire une fonction qui analyse une liste de notes (entre 0 et 20) en affichant:

� Le nombre de notes

� La moyenne

� Le nombre de notes au-dessus de 10

Le nombre de notes au-dessous de 10� Le nombre de notes au-dessous de 10

� La meilleure note

� La plus mauvaise note

� L’histogramme des notes (pylab.hist)

� Essayer avec des notes aléatoires from scipy import *

-> fonction random.randint

Page 16: CoursPython

Exercice 2 - Triangle de Pascal

1

1 1

1 2 1

1 3 3 1

1 4 6 4 1

Ci,j=Ci-1,j-1+Ci-1,j

Ecrire une fonction qui affiche les n premières lignes du Ecrire une fonction qui affiche les n premières lignes du

triangle de Pascal. Ecrire le calcul de manière vectorielle

(ligne = vecteur).

Page 17: CoursPython

Exercice 3 – Dessiner un cercle

� Un cercle (x(t),y(t)) est solution d’un système différentiel: dx/dt = -y

dy/dt = x

t = angle en radian

� Ecrire un programme qui dessine un cercle en intégrant les équations différentielles (x(t+dt)=x(t)+dt*(-y(t)))

� La même chose en l’écrivant sous forme vectorielle:

X=(x,y)

dX/dt=MX0 -1

1 0M=

Page 18: CoursPython

Exercice 4 – Carrés presques magiques

[[ 3. 4. 2. 5. 1.]

[ 1. 2. 5. 3. 4.]

[ 4. 5. 3. 1. 2.]

[ 2. 3. 1. 4. 5.]

[ 5. 1. 4. 2. 3.]]

Somme identique sur les lignes et les colonnes

1) Ecrire une fonction qui détermine si un carré (= matrice) est presque 1) Ecrire une fonction qui détermine si un carré (= matrice) est presque

magique.

2) Ecrire une fonction qui renvoie un carré presque magique dit « élémentaire »:

3) Ecrire une fonction qui calcule un carré presque magique en échangeant un

grand nombre de fois des lignes et des colonnes aléatoirement à partir d’un

carré élémentaire.

[[ 1. 2. 3. 4. 5.][ 2. 3. 4. 5. 1.][ 3. 4. 5. 1. 2.][ 4. 5. 1. 2. 3.][ 5. 1. 2. 3. 4.]]