Vous êtes sur la page 1sur 34

Année Universitaire

2021-2022

Python pour le calcul scientifique


Plan
1. Définition

2. Création d’un tableau

3. Manipulation des tableaux

4. Autres opérations sur les tableaux

5. Création d’une matrice

6. Parcours d’une matrice

7. Opérations sur les matrices


2
Les tableaux avec Numpy

3
1- Définition
 NumPy Le module incontournable pour le calcul scientifique avec Python est
NumPy, également connu sous le nom de "Python numérique". Ce module prend en
charge les fonctionnalités suivantes :

 Tableaux à N dimensions, qui permettent de manipuler des données


multidimensionnelles de manière efficace.
 Fonctions mathématiques pour effectuer des opérations numériques avancées.
 Outils d'intégration de code C/C++ et Fortran, permettant d'optimiser les
performances de certaines opérations.
 Fonctions utiles d'algèbre linéaire, de transformée de Fourier et de génération de
nombres aléatoires.
 L'objet principal de NumPy est les tableaux multidimensionnels homogènes,
également appelés ndarray. Un ndarray est un tableau d'éléments (généralement des
nombres) de même type, indexés par un tuple d'entiers positifs, et représentés par
une seule variable. Les éléments individuels d'un ndarray sont appelés des éléments
4
1- Définition
 Types élémentaires en Python 3
 int Entier (Ex. 732 ou -5)
 float Nombre décimal (Ex. 3.14 ou 2.0 ou 1e6 (= 1000000.0))
 bool Booléen (True ou False)
 str chaîne de caractères (Ex. 'hello' ou 'C'). Une constante chaîne de caractères
doit être limitée par des guillemets (ou des quotes)
 None Null (Ex. >>> print(print("Hello, World!"))
None)
 complex Nombre complexe (Ex. a = 1 + 5j)
 Structures avancées intégrées en Python 3
 list Liste (Ex. infoperso = ['Pierre', 'Dupont', 18, 1.75])
 tuple Tuple (Ex. infoperso = ('Pierre', 'Dupont', 18, 1.75), ou
infoperso = 'Pierre', 'Dupont', 18, 1.75)
 dict Dictionnaire (Ex. moyennes = {'maths': 12.5, 'anglais': 15.8})
Remarque : Contrairement aux listes en Python, les tableaux Numpy ne peuvent contenir
que des éléments de même type.
5
2- Création d’un tableau
#importer Numpy
import numpy as np
#Créer un tableau à partir d’une liste en utilisant la fonction array()
int_number_array=np.array([1,2,3,4])
print(int_number_array)
print(type(int_number_array))
print(int_number_array.dtype)
[1 2 3 4]
<class 'numpy.ndarray'>
int32
float_number_array=np.array([9.1,3.4,5.7,4.4])
print(float_number_array)
print(float_number_array.dtype)
[9.1 3.4 5.7 4.4]
float64
6
2- Création d’un tableau
#les attributs d’un tableau
 ndarray.ndim: Donne le nombre d'axes ou de dimensions dans le tableau.
 ndarray.shape: Donne les dimensions du tableau sous la forme d'un tuple d'entiers
(n, m) pour un tableau avec n lignes et m colonnes.
 ndarray.size: Donne le nombre total d'éléments du tableau.
 ndarray.dtype: Donne le type des éléments du tableau. NumPy fournit ses propres
types tels que np.int32, np.int16, np.float64, etc.
 ndarray.itemsize: Donne la taille de chaque élément du tableau en octets.
 ndarray.data: Donne le tampon (buffer) contenant les éléments réels du tableau. En
règle générale, on n'accède pas directement à cet attribut, car on utilise les fonctions
d'indexation pour accéder aux éléments du tableau.
 Ces attributs sont utiles pour obtenir des informations sur la structure et les
propriétés des tableaux NumPy, ce qui facilite la manipulation des données et les
calculs scientifiques avec Python.
7
2- Création d’un tableau

#attributs d’un tableau


a = np.array([1,2,3,4,5])
print(a.ndim)
1
print(a.shape)
(5,)
print(a.size)
5
print(a.dtype)
int32
print(a.itemsize)
4
print(a.data)
<memory at 0x000002D6FD259B88> 8
2- Création d’un tableau

 Les tableaux peuvent être créés autrement:


#suite arithmétiques de pas 1
a= np.arange(start=0, stop=5) #la dernière valeur n’est pas considérée
print(a)
[0 1 2 3 4]
#suite arithmétiques avec un pas
a= np.arange(start=0, stop=8, step=2)
print(a)
[0 2 4 6]
#suite linéaire (le nombre de valeurs est spécifié avec num et le dernier élément
est considéré)
a = np.linspace(start=0, stop=12, num=6)
print(a)
[ 0. 2.4 4.8 7.2 9.6 12. ] 9
2- Création d’un tableau

 Les tableaux peuvent être créés autrement:


#vecteur de valeurs identiques de 0
a = np.zeros(shape=4) #1 dimension et 4 valeurs (pour initialisation)
print(a)
[0. 0. 0. 0.]
#vecteur de valeurs identiques à 1
a = np.ones(shape=4) #1 dimension et 4 valeurs
print(a)
[1. 1. 1. 1.]
#vecteur de valeurs répétées
a = np.full(shape=4, fill_value=3.14)
print(a)
[3.14 3.14 3.14 3.14]
10
2- Création d’un tableau

 Remarques:

#array() vs copy vs asarray


b = numpy.array (a) # b est une copie de a (si a modifié, b n’est pas modifiable)
b = numpy.copy (a) #copier tous les éléments de a dans b
b = numpy.asarray (a) # b et a pointent vers le même endroit (si a changé, b l'est
aussi).
#conversion de type
b = a.astype(float) #convertir les éléments du tableau en nombres réels

11
2- Création d’un tableau

##création d’un tableau à partir d’un fichier


data = np.loadtxt("./my_file.txt")
‘./’ représente le répertoire courant ou bien il faut spécifier le chemin du fichier
Ex. "C://Users//Ibrahim//Desktop//my_file.txt"
 Remarques:
 loadtxt est une fonction qui permet de charger les données à partir d’un
fichier texte
 savetxt est une fonction qui permet de sauvegarder (enregistrer) un tableau
dans un fichier texte.
 Utilisation d’un séparateur (delimiter) # séparation des valeurs
Ex. data = np.loadtxt("./my_file.txt ", delimiter = ',')
 Possibilité de typage explicite :
Ex. data = np.loadtxt("./my_file.txt", dtype = float) 12
2- Création d’un tableau

 Conversion d’une liste en type array de numpy


Une liste (type list) est une collection d’objets en Python (tableau dynamique)
# Définition d’une liste
L = [2.4, 3.6, 4.8, 5.9]
print(type(L))
<class 'list'>
print(L)
[2.4, 3.6, 4.8, 5.9]
arr = np.asarray(L, dtype = float)
print(type(arr))
<class 'numpy.ndarray'>
print(arr)
[2.4 3.6 4.8 5.9] 13
2- Création d’un tableau

 Remarque
La liste initiale peut contenir des données de types différents. Numpy peut
convertir les données au type le plus général (Ex. int float)
a = np.array([2, 3.14, 4.75, 6, 8])
print(a)
[2. 3.14 4.75 6. 8. ]

a = np.array([True, False, 3, 6.75]) # False correspond alors à 0 et True à 1


print(a)
[1. 0. 3. 6.75]

14
3- Manipulation des tableaux

#Accès à tous les éléments


a = np.array([1.5, 2.6, 4.8, 6.6, 8.4])
print(a) [1.5 2.6 4.8 6.6 8.4] #afficher tous les éléments du tableau ou
print(a[:]) #afficher tous les éléments du début à la fin (:)
[1.5 2.6 4.8 6.6 8.4]
#Accès indicé (premier élément)
print(a[0])
1.5
#Accès indicé (dernier élément)
print(a[a.size-1])
8.4

15
3- Manipulation des tableaux

#Plage d’indices (slicing)


print(a[1:4])
[2.6 4.8 6.6]
#Autres plage d’indices
print(a[:4])
[1.5 2.6 4.8 6.6]
#Autre plage d’indices
print(a[2:])
[4.8 6.6 8.4]
#Indiçage négatif
print(a[-1])
8.4
#Indiçage négatif
print(a[-3:]) [4.8 6.6 8.4]
16
3- Manipulation des tableaux

#Ajout d’élément (A la fin du tableau)


a = np.array([1.5, 2.6, 4.8, 6.6, 8.4])
a = np.append(a,12)
print(a)
[ 1.5 2.6 4.8 6.6 8.4 12. ]
#Suppression d’élément selon son indice
b = np.delete(a,1) #suppression de a[1]=2.6
print(b)
[ 1.5 4.8 6.6 8.4 12. ]
#Modification de la taille d’un tableau numpy
a = np.array([2,4,6,8])
a = np.resize(a,6)
print(a)
[2 4 6 8 2 4] #les nouvelles valeurs sont les deux premières valeurs
17
3- Manipulation des tableaux

#Modification de la taille d’un tableau numpy


print(np.reshape(a,(2,3))) #reshape ne modifie pas le tableau de départ, mais
[[2 4 6] renvoie seulement le tableau modifié
[8 2 4]]
print(a)
[2 4 6 8 2 4]
#Concaténation de deux tableaux numpy
a = np.array([2, 4.1, 5.2, 6.3])
b = np.array([1.6, 3.4, 8, 10])
c = np.append(a,b)
print(c)
[ 2. 4.1 5.2 6.3 1.6 3.4 8. 10. ]

18
4- Autres opérations sur les tableaux

#Un autre tableau numpy a = np.array([2.1, 3.2, 4.5, 6.7])


#Trouver la valeur max/min
print(np.max(a)) 6.7 print(np.min(a)) 2.1
#Trouver l’indice de la valeur max/min
print(np.argmax(a)) 3 print(np.argmin(a)) 0
#Trier un tableau numpy
a = np.array([2.1, 1.3, 5.6, 5.2, 2.9, 0.5])
print(np.sort(a)) [0.5 1.3 2.1 2.9 5.2 5.6]
#Récupérer les indices des éléments triés
print(np.argsort(a)) [5 1 0 4 3 2]
#Les valeurs distinctes d’un tableau numpy
a = np.array([1,1,2,1,2,3,1,3])
print(np.unique(a)) [1 2 3] 19
4- Autres opérations sur les tableaux

 Opérations mathématiques (arithmétiques) simples:


a = np.arange(5)
print(a) [0 1 2 3 4]
print('a+4=', a+4) #addition
a+4= [4 5 6 7 8]
print('a-4=', a-4) #soustraction
a-4= [-4 -3 -2 -1 0]
print('a*4=', a *4) #multiplication
a*4= [ 0 4 8 12 16]
print('a/4=', a/4) #division réelle ou rationnelle
a/4= [0. 0.25 0.5 0.75 1. ]
print('a//4=',a//4) #division entière
a//4= [0 0 0 0 1]
20
4- Autres opérations sur les tableaux

 Fonctions mathématiques pour les statistiques:


a = np.array([1,2,3,4,5])
#la moyenne
print(np.mean(a)) 3.0
#la médiane
print(np.median(a)) 3.0
#la déviation standard (écart-type)
print(np.std(a)) 1.4142135623730951
#la variance
print(np.var(a)) 2.0
#qème centile
print(np.percentile(a,50)) 3.0 #la médiane (50%)
21
4- Autres opérations sur les tableaux

 Fonctions mathématiques pour les statistiques:


a = np.array([1,2,3,4,5])
#somme
print(np.sum(a))
15
#somme cummulée
print(np.cumsum(a))
[ 1 3 6 10 15]

 Remarque:
La librairie n’est pas aussi riche en termes de fonctions, d’autres librairies peuvent
être utilisées telles que Scipy (pour les mathématiques, la science et l’ingénierie).

22
4- Autres opérations sur les tableaux

 Opérations élément par élément (Element-wise)


a = np.array([1.2,2.3,3.4,4.1]) et b = np.array([1,2,3,4])
#multiplication élément par élément
print(a*b) [ 1.2 4.6 10.2 16.4]
#addition élément par élément
print(a+b) [2.2 4.3 6.4 8.1]
# multiplication par un scalaire
print(1.5*a) [1.8 3.45 5.1 6.15]
#comparaison de tableaux
a = np.array([2,1,3,4]) et b = np.array([1,5,2,8])
c=a>b
print(c) [ True False True False] 23
4- Autres opérations sur les tableaux

 Opérations logiques
a = np.array([False, False, True, True], dtype=bool)
b = np.array([True, False, False, True], dtype=bool)
#ET logique
print(np.logical_and(a,b))
[False False False True]
#OU exclusif logique
print(np.logical_xor(a,b))
[ True False True True]
#Négation logique
print(np.logical_not(a))
[ True True False False]

24
5- Création d’une matrice

#importer Numpy
import numpy as np
#Création d’une matrice manuellement à partir un ensemble d’éléments
a = np.array([[1,2,3], [2,6,8], [4,-2,-1]])
print(a)
[[ 1 2 3]
[ 2 6 8]
[ 4 -2 -1]]
#type de la structure
print(type(a))
<class 'numpy.ndarray'>

25
5- Création d’une matrice

#Créer une matrice à partir d’une liste de listes en utilisant la fonction array()
a = np.array([[1,2,3], [2,6,8], [4,-2,-1]])
#type d’objets/éléments
print(a.dtype)
int32
#dimension
print(a.ndim)
2 # Il s’agit d’une matrice
#nombre de lignes et de colonnes
print(a.shape)
(3, 3) #3 lignes et 3 colonnes

26
5- Création d’une matrice

#Création d’une matrice à partir d’une séquence


a = np.arange(0,8).reshape(2,4) #arange permet de générer une séquence d’entiers (de 0
à 7), et reshape permet de renvoyer une matrice avec 2 lignes et 4 colonnes
print(a)
[[0 1 2 3]
[4 5 6 7]]
#Création d’une matrice à partir d’un vecteur
a = np.array([2.1,1.2,5.3,6.4,2.5,7.9])
print(a.shape) (6,)
b = a.reshape(2,3) #redimensionner le vecteur en une matice (2 lignes, 3 colonnes)
print(b)
[[2.1 1.2 5.3]
[6.4 2.5 7.9]]
27
5- Création d’une matrice

#Matrice avec des éléments identiques-0


a = np.zeros(shape=(3,2))
print(a)
[[0. 0.]
[0. 0.]
[0. 0.]]
#Matrice avec des éléments identiques-1
a = np.ones(shape=(2,4))
print(a)
[[1. 1. 1. 1.]
[1. 1. 1. 1.]]

28
5- Création d’une matrice

#Chargement à partir d’un fichier texte


Les données peuvent être stockées dans fichier texte ou CSV, pour le cas du fichier texte, il
s’agit d’utiliser la fonction loadtxt (chargement) et savetxt (enregistrement).
a = np.loadtxt("./my_file.txt ", delimiter= "\t", dtype=float)
print(a) # la matrice affichée
On peut modifier le répertoire courant en important un module os par exemple.
import os
os.getcwd() # affiche le répertoire de travail actuel
os.chdir(chemin) # permet de le modifier
#conversion d’une liste en une matrice (array de numpy)
l = [2.5, 4.5, 6.5, 8.5]
a = np.asarray(l, dtype=float).reshape(2,2) print(a)
[[2.5 4.5]
[6.5 8.5]]
29
6- Parcours d’une matrice

 L’accès aux éléments d’une matrice s’effectue à travers les indices en utilisant le
parcours ligne par ligne ou bien le parcours colonne par colonne.
#boucles indices
import numpy as np
2
a = np.array([[2,4],[6,8],[3,5]])
s=0
4
for i in range(a.shape[0]): 6
for j in range(a.shape[1]): 8
print(a[i,j]) 3
s+=a[i,j] 5
print(s, "est la somme des éléments de la matrice") 28 est la somme des
éléments de la matrice

30
7- Opérations sur les matrices

 Les opérations de calcul s’effectuent selon un axe (axe 0: le traitement des


éléments par ligne pour chaque colonne, et axe 1: cas inverse)
#calcul de la moyenne des éléments par ligne pour chaque colonne
a = np.array([[2,4],[6,8],[3,5]])
print(np.mean(a, axis=0)) [3.66666667 5.66666667]
#calcul de la moyenne des éléments par colonne pour chaque ligne
print(np.mean(a, axis=1)) [3. 7. 4.]
#calcul la somme des éléments par ligne pour chaque colonne
print(np.sum(a, axis=0)) [11 17]
#matrice de corrélation
b = np.corrcoef(a, rowvar=0)
print(b)
[[1. 1.]
[1. 1.]]
31
7- Opérations sur les matrices

 Autres opérations
a = np.array([[1.2,2.3,5.5],[8.6,6.8,3.6],[2.2,1.9,9.6]])
b = np.array([[5.5,3.6,4.6],[2.2,4.7,3.6],[4.7,5.9,1.4]])
#transposé d’une matrice
print(a)
[[1.2 2.3 5.5] print(np.transpose(a))
[8.6 6.8 3.6] [[1.2 8.6 2.2]
[2.2 1.9 9.6]] [2.3 6.8 1.9]
#multiplication de deux matrices [5.5 3.6 9.6]]
print(np.dot(a,b))
[[37.51 47.58 21.5 ]
[79.18 84.16 69.08]
[61.4 73.49 30.4 ]]
32
7- Opérations sur les matrices

 Autres opérations
a = np.array([[1.2,2.3,5.5],[8.6,6.8,3.6],[2.2,1.9,9.6]])
b = np.array([[5.5,3.6,4.6],[2.2,4.7,3.6],[4.7,5.9,1.4]])
#déterminant d’une matrice
print(np.linalg.det(b))
-72.71199999999999
#inversion d’une matrice
print(np.linalg.inv(b))
[[ 0.20161734 -0.30393883 0.11910001]
[-0.19033997 0.1914402 0.13312796]
[ 0.12528881 0.21358235 -0.24658928]]

33
7- Opérations sur les matrices

 Autres opérations
x = np.array([[2.5,5.5],[1.2,2.6],[4.5,6.5]])
y = np.array([[1.5,3.2],[1.4,9.8]])
#résolution d’equation
z = np.array([1.5, 2.5])
print(np.linalg.solve(y,z)) #on cherche à résoudre y.a=z
[0.6555773 0.16144814]
#vérification de la solution précédente
print(np.dot(np.linalg.inv(y),z)) #a=y-1.z
[0.6555773 0.16144814]
#matrice symétrique en utilisant xtx
[[27.94 46.12]
s = np.dot(np.transpose(x),x) [46.12 79.26]]
34

Vous aimerez peut-être aussi