TP1 Numpy Matplotlib Corrige
TP1 Numpy Matplotlib Corrige
TP1 Numpy Matplotlib Corrige
Champollion
2ème année
Section 1 :
N umpy est un module/bibliothèque Python qui permet à la fois de manipuler des tableaux multidimensionels
mais aussi de faire des calculs sur ces objets. Ces tableaux sont du type array qui est similaire à une liste( list)
avec la condition supplémentaire que tous les éléments sont du même type (entiers ou flottants). Ci-dessous un
code qui permet de convertir une liste en un tableau via la fonction array :
import numpy a s np #np d e v i e n t l ’ a l i a s ou l ’ a b r e g e de numpy
a= np . a r r a y ( [ 1 , 5 , 7 , 8 , 6 , 4 ] )
N.B. Un alias est le deuxième nom d’une variable. Dans ce cas, lorsque la valeur référencée par la variable b est modifiée, il en sera
de même pour la variable a . Pour s’en convaincre, modifier le premier élément de b . Afficher ensuite la valeur de la variable a et
b avec l’instruction print .
1. En cas de doute sur l’utilisation d’une fonction, taper help(nombibliotheque.nomfonction) sur la console pour obtenir de
l’aide.
1
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
ou
z b i s = np . append ( z , np . o n e s ( 1 0 ) )
Correction :
import numpy a s np
a = np . a r a n g e ( 0 , 1 , 0 . 1 )
b = np . l i n s p a c e ( 0 , 0 . 9 , 1 0 )
#
Question auto-évaluation : Êtes-vous capable de générer un vecteur de 100 éléments variant de −π/2 à π/2
de pas d’incrémentation constant ?
4. Prenez une des fonctions affichées, puis à l’aide de la fonction native help(), identifier :
— son rôle, et éventuellement le type de variable que renvoie la fonction
— le nombre d’arguments obligatoires pour son fonctionnement, respectivement leur type
— les arguments optionnels.
Correction :
Z = np . random . uni for m ( 0 , 0 . 1 , 1 0 )
print ( ’ V a le ur ␣max␣ e s t ’ , np . min( Z ) )
print ( ’ V a le ur ␣max␣ e s t ’ , np .max( Z ) )
z = Z/np .max( Z )
2
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
Section 2 :
Numpy permet de « vectoriser », i.e. appliquer une opération à un vecteur/tableau et éviter les boucles. Par
exemple le code suivant multiplie chacun des éléments du tableau a par le nombre π/4 2 et affecte le résultat
de multiplication à un nouveau tableau b .
import numpy a s np
a = np . a r r a y ( [ 1 , 2 , 5 , 7 ] )
b = a ∗np . p i / 4 .
De la même manière, nous pouvons effectuer l’opération suivante c = np.sin(b) pour calculer le sinus de
chacun des éléments de b . La plupart des fonctions mathématiques que vous connaissez sont disponibles sous
numpy (e.g. sin() , cos() , , tan() exp() , arccos() , etc.). Ces fonctions s’appliquent élément par élément
sur les tableaux type array .
f (x) = sin(x)
3
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
import m a t p l o t l i b . p y p l o t a s p l #d o i t e t r e p l a c e e j u s t e a p r e s i m p o r t numpy as np
...
p l . p l o t ( x , y , ’−∗ ’ ) #Tracer y en f o n c t i o n de x
p l . show ( ) #a f f i c h e r l a f e n e t r e du t r a c e
Explication : Matplotlib est une bibliothèque Python qui permet de faire toutes sortes de tracés. Pyplot est une
sous-bibliothèque de Matplotlib essentiellement utilisé pour tracer des fonctions. Ci-dessus sont des instructions
de base pour se servir de Matplotlib où nous avons importé la pyplot avec l’alias pl. La fonction plot() permet
de tracer des valeurs tabulées et la fonction show() intervient systématiquement à la fin pour faire apparaître
la fenêtre de tracé. Davantage de précisions sont données dans le mémento distribué sous Moodle Séance 1
(« Tracer-sous-Python » ).
Correction :
import m a t p l o t l i b . p y p l o t a s p l
import numpy a s np
#g e n e r a t i o n v e c t e u r x
x = np . l i n s p a c e ( 0 , np . pi , 5 )
#c a l c u l e r l a v a l e u r de de s i n u s pour chaque e l e m e n t de x
y = np . s i n ( x )
#Tracer y en f o n c t i o n de x
p l . p l o t ( x , y , ’−∗ ’ )
#a f f i c h e r l a f e n e t r e du t r a c e
p l . show ( )
4
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
4. Toujours avant l’appel à pl.show() , ajouter un titre avec pl.title(’Le titre de votre choix’) et
des noms aux axes avec pl.xlabel(’x’) et pl.ylabel(’y=f(x)’) .
Explication : Pour chacun des appels de fonctions appartenant à pyplot, les opérations sont effectués sur
la même fenêtre figure active tant que la fonction show() n’est pas appelée. En général, la fonction
show() n’est ainsi appelé qu’à la fin du code (Voir mémento « Tracer-sous-Python » pour création de
plusieurs figures).
5. Ajouter un texte d’annotation avec la fonction annotate de pyplot avec l’instruction suivante : pl.annotate(’mon
texte annotation’, xy=(2*np.pi,0.55), xytext=(12, 0.5), fontsize=11, arrowprops=dict(width=1,
facecolor=’black’, shrink=0.02)) .
Explication : La fonction annotate() permet de rajouter une annotation fléchée pour apporter plus de
renseignement sur la fenêtre de figure. Les arguments sont
— xy correspondant à la position de l’annotation
— xytxt à la position du texte
— fontsize à la taille du texte
— arrowprops qui accepte comme arguments un dictionnaire des propriétés de la flèche à utiliser.
6. A l’aide de la fonction legend() et l’argument label de la fonction plot() , ajouter une légende sur chaque
courbe. Celle correspondant à la fonction f (x) est notée ’libre’ et f2 (x) est notée ’amorti’
7. Sauvegarder la figure en ajoutant l’instruction pl.savefig(’expcosfig.png’, dpi=300) avant l’ins-
truction pl.show() .
8. Vous chercherez dans votre répertoire de travail le fichier d’image nommée « expcosfig » sous le format
PNG. Selon la résolution qui vous souhaité, vous pourrez évidemment modifier la valeur de l’argument
dpi (résolution en dot per inch).
Correction :
import m a t p l o t l i b . p y p l o t a s p l
import numpy a s np
#g e n e r a t i o n v e c t e u r x
x = np . l i n s p a c e ( 0 , 10∗ np . pi , 5 0 0 )
#c a l c u l e r l a v a l e u r d e s deux f o n c t i o n s pour chaque e l e m e n t de x
y1 = np . c o s ( x )
y2 = y1 ∗np . exp(−x / 1 0 )
#c r e e r l a f i g u r e 1
pl . f i g u r e (1)
#Tracer y en f o n c t i o n de x
p l . p l o t ( x , y1 , ’− ’ , c o l o r= ’ b ’ , l a b e l= ’ l i b r e ’ )
p l . p l o t ( x , y1 , ’− ’ , c o l o r= ’ g ’ , l a b e l= ’ a m o r t i ’ )
pl . ylabel ( ’ f (x) ’ )
pl . xlabel ( ’x ’ )
p l . t i t l e ( ’ Le␣ t i t r e ␣ de ␣ v o t r e ␣ c h o i x ’ )
p l . a n n o t a t e ( ’mon␣ t e x t e ␣ a n n o t a t i o n ’ , xy=(2∗np . pi , 0 . 5 5 ) , x y t e x t =(12 , 0 . 5 ) , f o n t s i z e =11 ,
a r r o w p r o p s=dict ( width =1, f a c e c o l o r= ’ b l a c k ’ , s h r i n k =0.02) )
#a f f i c h e r l e s l a b e l s
pl . legend ()
#s a u v e g a r d e r l a f i g u r e
p l . s a v e f i g ( ’ e x p c o s f i g . png ’ , d p i =300)
#a f f i c h e r l a f e n e t r e du t r a c e
p l . show ( )
5
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
Attention ! La courbe paramétrique ne peut être tracée que si les deux vecteurs y1 et y2 ont été généré avec
les mêmes éléments (même vecteur de variable paramètre).
Correction :
p l . p l o t ( y1 , y2 }
6
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
Section 3 :
Devoir maison
Pour chaque exercice suivant, vous devez rendre un fichier de script en format .py.
def main ( ) :
7
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
alpha = 0.25
beta = 6 .
n=200
tmin = 0
tmax = 5
#d e f i n i t i o n de l a v a r i a b l e p a r a m e t r i q u e
t = np . l i n s p a c e ( tmin , tmax , n )
#d e f i n i t i o n de l a f o n c t i o n p a r a m e t r i q u e
x = np . exp(− a l p h a ∗ t ) ∗np . c o s ( b e t a ∗ t )
y = np . exp(− a l p h a ∗ t ) ∗np . s i n ( b e t a ∗ t )
pl . f i g u r e (2)
#a c t i v e r l a zone 1 du q u a d r i l l a g e 2∗2
pl . subplot (221)
p l . p l o t ( t , y ) #y en f o n c t i o n de t
#a c t i v e r l a zone 2 du q u a d r i l l a g e 2∗2
pl . subplot (222)
p l . p l o t ( x , y ) #y en f o n c t i o n de x
#a c t i v e r l a zone 4 du q u a d r i l l a g e 2∗2
pl . subplot (224)
p l . p l o t ( x , t ) #t en f o n c t i o n de x
i f __name__==’ ’__main__ ’ ’ :
main ( ) #a p p e l programme p r i n c i p a l main ( )
8
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
Correction :
#d e f i n i t i o n d ’ un d i c t i o n n a i r e de f o n t de t e x t e
titlefont = {
’ family ’ : ’ serif ’ ,
’ color ’ : ’ black ’ ,
’ weight ’ : ’ bold ’ ,
’ size ’ : 16 ,
}
#d e f i n i t i o n de l ’ a n g l e p o l a i r e en r a d i a n s
t h e t a= np . l i n s p a c e ( 0 , 2 ∗ np . pi , 2 0 0 )
#d e f i n i t i o n du rayonnement pour chaque c a s
r 1 = np . o n e s ( np . s i z e ( t h e t a ) )
r 2 = ( 1 + np . c o s ( t h e t a −np . p i / 4 ) )
p l . f i g u r e ( 3 ) #c r e e r une f i g u r e numero 3
p l . p o l a r ( t h e t a , r1 , ’−−r ’ , lw =2 , l a b e l= ’ i s o t r o p e ’ )
p l . p o l a r ( t h e t a , r2 , ’−k ’ , lw =2 , l a b e l= ’ c a r d i o i d e ’ )
p l . t i t l e ( ’ Diagramme␣ de ␣ rayonnement ’ , f o n t d i c t = t i t l e f o n t )
p l . l e g e n d ( l o c =2)
p l . s a v e f i g ( ’ antenne . png ’ , d p i =300)
p l . show ( )
Activité 3 : subplot()
Soit deux équations suivantes :
Correction
import numpy a s np
import m a t p l o t l i b . p y p l o t a s p l
9
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
#d e f i n i t i o n d e s p a r a m e t r e s c o n s t a n t s
n=50
p = np . p i
t 1 = np . l i n s p a c e ( 0 , 5 , n )
t 2 = np . l i n s p a c e ( 0 , 2 , n )
y1 = np . exp(− t 1 ) ∗np . c o s ( 2 ∗ p∗ t 1 )
y2 = np . c o s ( 2 ∗ p∗ t 2 )
pl . f i g u r e (5)
pl . subplot (211)
p l . p l o t ( t1 , y1 , ’−o ’ , c o l o r= ’ y ’ )
p l . y l a b e l ( ’ Damped␣ o s c i l l a t i o n ’ )
pl . subplot (212)
p l . p l o t ( t2 , y2 , ’−d ’ , c o l o r= ’ r ’ )
p l . y l a b e l ( ’ Undamped ’ )
p l . x l a b e l ( ’ ␣ time ␣ ( s ) ’ )
pl . subplot (211)
p l . t i t l e ( ’A␣ t a l e ␣ o f ␣ 2 ␣ s u b p l o t s ’ )
p l . show ( )
10
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
Section 4 :
Scercle πd2 /4 π
= =
Scarre d2 4
— La probabilité qu’un point se trouve dans le cercle tend vers ce rapport.
4. Réaliser le graphique ci-dessous en prenant 1000 points, vert à l’intérieur du cercle rouge sinon, ne pas
se soucier du ratio de la figure.
11
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
Sous python l’instruction pl.plot(xx,zz) trace donc un ensemble de valeurs de z en fonction d’un ensemble
de valeurs de x.
Dans ce cas-ci, chaque image est associée à une seule valeur d’antécédent.
12
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
############################
# P a r t i e g e n e r a t i o n de l a m a t r i c e ZZ
############################
#i n i t i a l i s a t i o n d ’ un t a b l e a u de dimension n∗m
ZZ = np . z e r o s ( ( n ,m) )
f o r i in range ( 0 , n ) : #i n d i c e pour v a l e u r de yy
f o r j in range ( 0 ,m) : #i n d i c e pour v a l e u r s de xx
ZZ [ i , j ] = np . exp(− xx [ j ] ∗ ∗ 2 − yy [ i ] ∗ ∗ 2 )
y3
Les matrices à générer sont de dimension 4 × 3 :
XX YY ZZ = g(XX, Y Y )
↓ ↓ ↓
x0 x1 x2 y0 y0 y0 z0,0 z0,1 z0,2
x0 x1 x2 y1 y1 y1 z1,0 z1,1 z1,2
x0
→
x1 x2 y2 y2 y2 z2,0 z2,1 z2,2
x0 x1 x2 y3 y3 y3 z3,0 z3,1 z3,2
Tracer une cartographie de couleur à partir de la matrice d’images ZZ et les matrices d’abscisses
XX et d’ordonnées Y Y
############################
# P a r t i e t r a c e r une c a r t o g r a p h i e en e c h e l l e de c o u l e u r de l a m a t r i c e ZZ
############################
p l . f i g u r e ( )#c r e a t i o n d ’ une f e n e t r e de f i g u r e
p l . c o n t o u r f (XX,YY, ZZ , 2 0 0 , a l p h a= 0 . 7 5 , cmap = p l . cm . hot ) #t r a c e r une c a r t o g r a h i e a v e c
l ’ e c h e l l e de c o u l e u r d e f i n i e dans l a c a r t e de c o u l e u r s p l . cm . h o t
p l . c o l o r b a r ( ) #a f f i c h a g e de l ’ e c h e l l e de c o u l e u r
13
Licence PC-EEA Session Travaux Pratiques 1 I.N.U. Champollion
2ème année
14