0% ont trouvé ce document utile (0 vote)
331 vues31 pages

Python Calcul Scientifique Pcsi

Transféré par

azizkarabibene
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
331 vues31 pages

Python Calcul Scientifique Pcsi

Transféré par

azizkarabibene
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

1

Python:
Application
au calcul
scientifique
Part I
S.DARRAGI
Plan
2

o Introduction
o Bibliothèque numpy
o Classe Ndarray, array

o Opérations élémentaires

o Slicing

o Algèbre linéaire

IPEST S.Darragi
Introduction
3

 La distribution standard de Python contient un


certain nombre de bibliothèques qui ont été
considérées comme suffisamment génériques pour
intéresser la majorité des utilisateurs (os, sys,
math, mathc, random, Tkinter……) leur utilisation
est relativement bien expliquée dans la
documentation de la distribution du language.
 Cependant, Python offre une panoplie de
bibliothèques offrant des couches supplémentaires
très utiles dans différents domaines d’application
 Nous nous intéressons en particulier aux
bibiothèque numpy, scipy et matplotlib

IPEST S.Darragi
Introduction
4

 Numpy & scipy : bibliothèques spécifiques pour


le calcul scientifique : Interpolation,
intégration (ODE integrators), algèbre linéaire,
Interpolation, systèmes dynamiques…
 Pour plus d’info consulter
 http://www.numpy.org/
 http://www.scipy.org/

 Matplotlib : bibliothèque de dessin de courbe


2D/3D (très riche)
 http://matplotlib.sourceforge.net/

IPEST S.Darragi
Bibliothèque Numpy
5

• Python ne propose de base que le type


list, conteneur dynamique hétérogène
puissant, mais non orienté calcul
numérique!!
• Le module numpy propose un ensemble de
classes, d’objets et de fonctions dédiés
aux calculs numériques.
• La classe ndarray (N dimensional array):
tableaux homogènes multi-dimensionnels,
IPEST S.Darragi
Bibliothèque Numpy
6

Le module numpy offre également un


ensemble de sous bibliothèques dédiées:

 numpy.linalg: un module d’algèbre linéaire


basique,
 numpy.random: un module pour les
générateurs aléatoires,
 Numpy.fft: un module basique de calculs
de FFT (Fast Fourier Transform).

IPEST S.Darragi
Bibliothèque Numpy :
La classe Ndarray, array
7
>>> import numpy as np
>>> M=np.ndarray((2,2))#création de tableau (2,2) de valeurs
aléatoires par défaut réelles mais on peut changer à l’aide du
paramètre dtype !
>>> print(M) #Matrice de dimension 2X2 réelle
[[ 4.24510811e+175 1.66039110e+243]
[ 2.59345432e+161 1.96507163e-147]]
>>> M=np.ndarray((2,2), dtype=int) #Matrice de dimension 2X2 entière
>>> print(M)
[[ 46339264 1668181827]
[1852142689 1919906913]]
>>> np.empty((2,2))
array([[ 7.33986605e-294, 1.73591700e-297],
[ 7.34464436e-294, 7.34521778e-294]])

IPEST S.Darragi
Bibliothèque Numpy: La classe Ndarray, array
8

La fonction numpy.arange()
>>> m = np.arange(3, 15, 2)
>>> m array([ 3, 5, 7, 9, 11, 13])
>>> type(m)
numpy.ndarray
Attention à la différence entre range et arange:
array range

IPEST S.Darragi
Bibliothèque Numpy: La fonction array
9

 La fonction array convertit un objet list en objet ndarray


bidimentionnel:
>>> m1 = np.array([1, 2, 3]) # print(m1) tableau à une
dimension
array([1, 2, 3])
>>> m2 = np.array([1, 2, 3], float) # print(m2)
# float, int bool...
array([ 1., 2., 3.])
>>> L2 = [4, 5, 6]
>>> m3 = np.array([[1, 2, 3],[4, 5, 6]]) # print(m3)
# liste de listes, matrice !!
array([[1, 2, 3], [4, 5, 6]])
Différence entre le type list et array ! !
10

Attention à la différence entre une liste et un array


Liste Array

Contenu hétérogène Contenu homogène

Taille illimité Taille prédéfinie

Mutable Mutable
Operateurs * et +

L=[1,2,4] T=np.array([1,2,4])
L*2 T*2
[1,2,4, 1,2,4] np.array([1,4,16])
L1=[4,7,1] T1=np.array([3,4,7])
L+L1 T+T1
[1,2,4,4,7,1]
IPEST S.Darragi np.array([4,6,11])
List VS array
11

 Un tableau est directement créé à partir d’une


liste:
L=[2, 4,-1]
T=np.array(L)
 La méthode tolist fait le travail inverse elle crée
un objet list, copie de l’objet ndarray :
>>> m3.tolist()
[[1, 2, 3],[4, 5, 6]]

IPEST S.Darragi
Bibliothèque Numpy :
La classe Ndarray:
12
attributs
>>> M = np.array([[1, 2, 3],[4, 5, 6]]) # une liste de listes donne une
matrice
>>> print(M)
[[1 2 3]
[4 5 6]]
>>> M.dtype # type des entrées de la matrice, ici desentiers
dtype(’int64’)
>>> M.shape # dimension de la matrice
(2, 3) # 2 lignes, 3 colonnes
>>> M.itemsize # taille des éléments en octets
8 # integer of 8 bytes (64 bits)
>>> M.size # nombre d’éléments
6
>>> m.ndim # nombre de dimensions (axes)
2
Bibliothèque Numpy
Autres générateurs de tableaux….
13

 Les fonctions numpy zeros, ones, eye et diag :


>>> m1 = np.zeros(4) ;# print(m1), création de tableau de 0
[ 0., 0., 0., 0.]
>>> m2 = np.ones(3, bool) ; # print(m2)
[ True True True]
>>> np.eye(3); #matrice identité
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
>>> np.diag([3,2,8]) #matrice diagonale
array([[3, 0, 0],
[0, 2, 0],
[0, 0, 8]])
IPEST S.Darragi
Bibliothèque Numpy :
Autres générateurs de tableaux….
14

 Les fonctions linspace, logspace créent des


vecteurs de float :
>>> np.linspace(0, 10, 5) # debut, fin, nombre de
points, trés utile pour le traçage des courbes
array([ 0., 2.5, 5., 7.5, 10.])
>>> np.logspace(1, 2, 4) # 4 points entre 10**1 et
10**2
array([ 10., 21.5443469, 46.41588834, 100.])
>>> np.logspace(1, 2, 4, base=2) # 4 points entre
2**1 et 2**2
array([ 2. , 2.5198421, 3.1748021, 4.])
IPEST S.Darragi
Array: accès à un élément
15
 Même principe d’indexation que les listes !
>>> M=np.array([[2,4,5,11],[4,5,0,1]])
>>> M
array([[ 2, 4, 5, 11],
[ 4, 5, 0, 1]])
>>> M[1,1] #2eme ligne 2eme colonne
5
>>>N=np.array([1,3,6,3,4,8])
>>> N
array([1, 3, 6, 3, 4, 8])
>>> N[-1] #accés au dernier élément
8
>>> N[2]=5 #mutable !
>>> N
array([1, 3, 5, 3, 4, 8])
IPEST S.Darragi
Array, slicing
16

 Il est possible de sélectionner une sous


matrice, en ne gardant que quelques lignes
consécutives et/ou certaines colonnes
consécutives
 Si M est une matrice
 M[:,:]: une copie intégrale de M avec nouvelle référence
 M[:a,:b] : sous matrice les lignes du début jusqu’à < a >
exclu, colonne de début jusqu’à <b> exclu.
 M[:,b] :colonne b +1
 M[a,:] :ligne a +1

IPEST S.Darragi
Array, slicing: exemple
17

>>>M=np.array([[2,3,4],[1,1,0],[3,8,0]]
) >>> M[:,1:]
>>> M[:,:] array([[3, 4],
array([[2, 3, 4], [1, 0],
[1, 1, 0], [8, 0]])
[3, 8, 0]]) >>> M[:1,:]
>>> N=M[:,:] array([[2, 3, 4]])
>>> id(N),id(M) >>> M[:2,:]
(39025168, 39024064) array([[2, 3, 4],
>>> M[1:,2:] [1, 1, 0]])
array([[0], >>> M[1,:]
[0]]) array([1, 1, 0])
>>> M[1:,1:] >>> M[:,2]
array([[1, 0], array([4, 0, 0])
[8, 0]])
IPEST S.Darragi
Opérateurs vectorialisés
18
Quand les paramètres sont des tableaux numpy,
les opérations usuelles (+,-,*,**,/) sont effectuées
coefficient par coefficient !!
>>> a, b = np.array([1, 2, 3, 4]), np.array([2, 3, 4, 5])
>>> a+b
array([3, 5, 7, 9])
>>> a-b
array([-1, -1, -1, -1])
>>> a**2
array([ 1, 4, 9, 16])
>>> 4*a, a*4
(array([ 4, 8, 12, 16]), array([ 4, 8, 12, 16]))

IPEST S.Darragi
Opérateurs vectorialisés (suite)
19
>>> a*b
array([ 2, 6, 12, 20])
>>> A=np.array([a,b])
>>> A
array([[1, 2, 3, 4],
[2, 3, 4, 5]])
>>> A*A # * fait une multiplication terme à
terme
array([[ 1, 4, 9, 16],
[ 4, 9, 16, 25]])

IPEST S.Darragi
Autres méthodes...
20

 Autres méthodes utiles de la classe ndarray :


>>> m = np.linspace(1,12,12).reshape((3,4));m
[[ 1. 2. 3. 4.]
[ 5. 6. 7. 8.]
[ 9. 10. 11. 12.]]
>>> m.sum(), m.min(), m.max() # somme, max, min
de tous les éléments
(78.0, 1.0, 12.)
>>> m.sum(axis=0) # somme des colonnes
array([ 15., 18., 21., 24.])
>>> m.min(axis=1) # min des lignes
array([ 1., 2., 3., 4.])
IPEST S.Darragi
21

import numpy as np
>>> M=np.arange(1,20,2)
>>> M
array([ 1, 3, 5, 7, 9, 11, 13, 15, 17, 19])
>>> N= M.reshape((2,5)) #redimensionne la matrice M en 2 lignes 5
colonnes
array([[ 1, 3, 5, 7, 9],
[11, 13, 15, 17, 19]])
>>> N.sum()
100
>>> N.sum(axis=0) #somme des colonnes
array([12, 16, 20, 24, 28], dtype=int32)
>>> N.sum(axis=1) #somme de lignes
array([25, 75], dtype=int32)

IPEST S.Darragi
Les ufunc….
22
Les ufunc sont des fonctions mathématiques courantes
(sin, cos, exp...) : (fonctios universelles)
1. qui s’appliquent à tous les éléments d’un objet ndarray,
2. qui renvoient l’objet ndarray résultant
>>> m = np.linspace(1,6,6).reshape((2,3)); print m
[[ 1. 2. 3.]
[ 4. 5. 6.]]
>>> s = np.sqrt(m);
array([[ 1. , 1.41421356, 1.73205081],
[ 2. , 2.23606798, 2.44948974]])
>>> np.exp(m)
array([[ 2.71828183, 7.3890561 , 20.08553692],
[ 54.59815003, 148.4131591 , 403.42879349]])
IPEST S.Darragi
Algebre linéaire avec numpy.linalg
23

A vous de jouer
 np.dot(M,N): multiplication matricielle
 np.inner (M,scalaire) : multiplie une matrice par un
scalaire
 np.diag ([liste_elt]) : crée une matrice diagonale
à partir d’une liste
 np.transpose (M): donne la matrice transposée

IPEST S.Darragi
numpy.linalg
24

 np.linalg.det(M): déterminant de la matrice


>>> a = np.array([[1, 2], [3, 4]])
>>> np.linalg.det(a) -2.0
 np.linalg.inv(M) : inverse de la matrice
>>> a = np.array([[1, 3, 3], [1, 4, 3], [1, 3, 4]])
>>> np.linalg.inv(a) array([[ 7., -3., -3.], [-1., 1., 0.],
[-1., 0., 1.]])
 np.linalg.solve(A,B) résolution du système linéaire
de type A x = B

IPEST S.Darragi
Algèbre linéaire avec numpy
25

>>> A = np.array([[1,1],[0,1]]);
>>> B = np.array([[2,0],[3,4]])
>>> np.dot(A,B) # produit matriciel
array([[5, 4],
[3, 4]])
>>> a, b = np.array([1,2,3]), np.array([0,1,0])
# 2 vectors
>>> np.dot(a,b)
2
>>> a, b = np.array([1,2,3]), np.array([0,1,1])
>>> np.dot(a,b)
5

IPEST S.Darragi
Algèbre linéaire
26
avec numpy
>>> import numpy.linalg as npl
>>> npl.det(m)
-0.00981811548021
>>> np.transpose(m) # ne modifie pas m
array([[ 0.57401918, 0.02683847],
[ 0.64990241, 0.01328225]])
>>>IM = npl.inv(m); IM
[[ -1.35283131 66.19421103]
[ 2.73356598 -58.46531103]]

IPEST S.Darragi
Algèbre linéaire avec numpy
27

Matrices diagonales :
>>> np.diag(np.arange(3))
array([[0, 0, 0],
[0, 1, 0],
[0, 0, 2]])
>>> np.diag(np.arange(1,3),1)
array([[0, 1, 0],
[0, 0, 2],
[0, 0, 0]])
>>> np.diag(np.arange(1,3),-1)
array([[0, 0, 0],
[1, 0, 0],
[0, 2, 0]])

IPEST S.Darragi
Tableau aléatoire avec le module random de
numpy
28

>>> import numpy as np


>>> import numpy.linalg as npl
>>> import numpy.random as npr
>>> m = npr.random(9).reshape((3,3)); m
array([[ 0.73377208, 0.26787043, 0.63561671],
[ 0.9495004 , 0.73684802, 0.01673223],
[ 0.08534191, 0.77328228, 0.700254 ]])
>>> y = npr.random(3); y
array([ 0.92367858, 0.32060105, 0.64198517])
>>> x = npl.solve(m, y); x
array([ 0.42757753, -0.13899785, 1.01817263])
>>> np.dot(m, x)
array([ 0.92367858, 0.32060105, 0.64198517])
IPEST S.Darragi
Suite…
29
>>> import numpy as np
>>> import numpy.linalg as npl
>>> import numpy.random as npr
>>> m = npr.random(4).reshape((2,2)); m
array([[ 0.57401918, 0.64990241],
[ 0.02683847, 0.01328225]])
>>> npl.det(m)
-0.00981811548021
>>> npl.transpose(m) # ne modifie pas m
array([[ 0.57401918, 0.02683847],
[ 0.64990241, 0.01328225]])
>>> mi = npl.inv(m); print (mi)
[[ -1.35283131 66.19421103]
[ 2.73356598 -58.46531103]]
IPEST S.Darragi
Les fichiers images !!
30

Un fichier image est un tableau ndarray


import matplotlib.image as pltim
pic=pltim.imread("nom_image.png")
print(pic,type(pic))

IPEST S.Darragi
Les fichiers images !!
31

Un fichier image est un tableau ndarray


import matplotlib.image as pltim
pic=pltim.imread("nom_image.png")
print(pic,type(pic))

IPEST S.Darragi

Vous aimerez peut-être aussi