Numpy Scipy Matplotlib-Checkpoint
Numpy Scipy Matplotlib-Checkpoint
Les tableaux numpy sont sous-jacents à de nombreux packages dédiés au calcul scientifique
sous Python.
Pour commencer, il faut importer Numpy au début du programme et ensuite on peut utiliser les
fonctions qu'y sont pre-définies. Par exemple, on définit des tableaux et on fait des opérations
arithmetiques avec les valeurs qu'ils contiennent.
Attention, les tableaux « numpy » ne gèrent que les objets de même type (ci dessous des
entiers).
# définir un vecteur
v = np.array([1, 12, 3, 18],dtype=float)
print(v)
print(type(v))
print(v.size)
[ 1. 12. 3. 18.]
<class 'numpy.ndarray'>
4
On peut facilement définir des arrays contenants des séquences de valeurs numériques avec la
fonction arange() :
[0 1 2]
[3 4 5 6 7 8]
[3 5 7]
[ 0. 3.14159265 6.28318531 9.42477796 12.56637061
15.70796327
18.84955592 21.99114858 25.13274123 28.27433388 31.41592654]
La fonction linspace() permet d’obtenir un array allant d’une valeur de départ à une valeur de fin
avec un nombre donné d’éléments (elle sera utilisé dans la section suivante sur Matplotlib).
a = np.array([1.2,2.5,3.2,1.8])
a = np.append(a,10)
print(a)
#concatenation 2 vecteurs
x = np.array([1,2,5,6])
y = np.array([2,1,7,4])
z = np.append(x,y)
print(z)
v = np.array([1.2,7.4,4.2,8.5,6.3])
print(v[0]) # le 1er indice est 0 (zéro)
#dernière valeur
print(v[v.size -1]) #v.size est ok parce que v est un vecteur
# ou aussi
print(v[-1])
#du début à l'indice 3 (non-inclus)
print(v[:3])
1.2
6.3
6.3
[1.2 7.4 4.2]
[4.2 8.5 6.3]
[7.4 4.2 8.5 6.3]
[7.4 8.5]
Tri et recherche :
v = np.array([1.2,7.4,4.2,8.5,6.3])
#valeurs distinctes
a = np.array([1,2,2,1,1,2])
print(np.unique(a))
8.5
1.2
3
27.6
[1.2 4.2 6.3 7.4 8.5]
[1 2]
# addition
c = a + b
print(c)
# multiplication
c = a * b
print(c)
[1 2 3]
[1 2 3]
[2 4 6]
[1 4 9]
a = np.array([1, 2, 3])
print(a)
# soustraction
c = a - b
print(c)
[1 2 3]
[2.5 2.5 2.5]
[-1.5 -0.5 0.5]
a = np.array([2, 8, 3])
print(a)
b = np.array([1, 2, 3])
print(b)
# division
c = a / b
print(c)
Multiplication vecteur-scalaire
a = np.array([1, 2, 3])
print(a)
# définir un scalaire
s = 0.5
print(s)
# multiplication vecteur-scalaire
c = s * a
print(c)
[1 2 3]
0.5
[0.5 1. 1.5]
Produit scalaire
a = np.array([1, 2, 3])
print(a)
b = np.array([1, 2, 3])
print(b)
# produit scalaire
c = a.dot(b)
print(c)
[1 2 3]
[1 2 3]
14
Matrices
Une matrice est un tableau (array) à 2 dimensions.
import numpy as np
B= np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]])
print(B)
print(type(B))
print(B.dtype)
print(B.shape)
#matrices de valeurs identiques, par ex. pour une initialisation
A = np.zeros((2, 1)) #attention, double parentèse
print("A=",A)
B= np.ones((1,3))
print("B=",B)
#plus generalement
C = np.full((2,4),fill_value=0.3)
print("C=",C)
A= [[0.]
[0.]]
B= [[1. 1. 1.]]
C= [[0.3 0.3 0.3 0.3]
[0.3 0.3 0.3 0.3]]
D= [[0.71104492 0.1536572 0.94428984]
[0.14618699 0.48768625 0.66219456]
[0.43780373 0.55732102 0.08415505]]
E= [[4 3 0 3]
[4 2 2 3]]
#matrice de valeurs
A = np.array([[1.2,2.5],[3.2,1.8],[1.1,4.3]])
#suppression
F = np.delete(A,1,axis=0)
print("F=",F)
C= [[1.2 2.5]
[3.2 1.8]
[1.1 4.3]
[4.1 2.6]]
D= [[1.2 2.5 7.8]
[3.2 1.8 6.1]
[1.1 4.3 5.4]]
E= [[1.2 2.5]
[4.1 2.6]
[3.2 1.8]
[1.1 4.3]]
F= [[1.2 2.5]
[1.1 4.3]]
G= [[1.2 2.5 3.2]
[1.8 1.1 4.3]]
# addition
C = A + B
print("C=",C)
# division
D = A / B
print("D=",D)
E = np.array([
[0.5, 0.5, 0.5],
[0.5, 0.5, 0.5]])
# soustraction
F = A - E
print("F=",F)
A = np.array([
[1, 2],
[3, 4],
[5, 6]])
B = np.array([
[1, 2],
[3, 4]])
# multiplication matricielle
C = A.dot(B)
print("C=",C)
C= [[ 7 10]
[15 22]
[23 34]]
D= [[ 7 10]
[15 22]
[23 34]]
Multiplication matrice-vecteur :
A = np.array([
[1, 2],
[3, 4],
[5, 6]])
# définir un vecteur
B = array([0.5, 0.5])
# multiplication vecteur-matrice
C = A.dot(B)
print(C)
Multiplication matrice-scalaire :
A = np.array([[1, 2], [3, 4], [5, 6]])
# définir un scalaire
b = 0.5
# multiplication matrice-scalaire
C = A * b
print(C)
Il existe plusieurs types de matrices avec des proprietés particulières (carrées, symétriques,
triangulaires,...).
• Matrice symétrique
# création d'une matrice A aleatoire
A = np.random.rand(3,3)
• Matrice triangulaire
# définir une matrice carrée
M = np.array([
[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
l= [[1 0 0]
[1 2 0]
[1 2 3]]
u= [[1 2 3]
[0 2 3]
[0 0 3]]
• Matrice diagonale
# définir une matrix carrée
M = np.array([
[1, 2, 3],
[1, 2, 3],
[1, 2, 3]])
# extraire la diagonale
d = np.diag(M)
print("d=",d)
• Matrice identité
I = np.identity(3)
print(I)
A = np.array([
[1, 2],
[3, 4],
[5, 6]])
# calculer la trace
B = np.trace(A)
print(B)
On utilise le sous-module linalg contenu dans Numpy pour les calculs d'algèbre linéaire.
A = array([
[1.0, 2.0],
[3.0, 4.0]])
# inverse
B = np.linalg.inv(A)
print(B)
# calculer le determinant
B = np.linalg.det(A)
print(B)
Resolution d'équations linéaires de type A.x = b, où A est une matrice, b et x deux vecteurs.
#résolution d'équation
A = array([
[1.0, 2.0],
[3.0, 4.0]])
b = np.array([1.7,1.0])
x = np.linalg.solve(A,b)
print(x)
A = array([
[1.0, 2.0],
[3.0, 4.0]])
Matplotlib est une librairie graphique pour générer des figures scientifiques en 2D et 3D. Parmi
les avanatges de cette librairie, on peut citer :
Tout d'abord, il faut importer le module matplotlib pour pouvoir utiliser dans votre
programme.
D’une manière générale les fonctions plt.plot attendent des vecteurs/matrices, c'est à dire des
tableaux de points du plan.
x=np.linspace(-5,5,100)
plt.plot(x,np.sin(x)) # on utilise la fonction sinus de Numpy
plt.ylabel('fonction sinus')
plt.xlabel("l'axe des abcisses")
plt.show()
plt.scatter(xs, ys);
On peut combiner ce graphique avec un deuxième nuage de points. Créons d'autres points.
plt.scatter(xs, ys)
plt.scatter(xs, zs)
<matplotlib.collections.PathCollection at 0x7fc6cce68a90>
Pour ajouter une légende, des axes et un titre à notre graphique (qui peuvent inclure du code $\
LaTeX$) :
plt.xlabel("$x$")
plt.ylabel("Valeur")
plt.title("Mon premier \"scatter plot\" ")
plt.legend();
Il est possible d'enregistrer la figure dans un fichier.
def f(t):
return np.exp(-t) * np.cos(2*np.pi*t)
plt.subplot(222)
plt.plot(t2, np.cos(2*np.pi*t2), 'r--') # 'r--' = petis traits rouges
plt.subplot(223)
plt.plot(t2, np.sin(2*np.pi*t2), 'b-') # 'b-' = trait continu bleu
Scipy : librairie d'algorithmes scientifiques sous Python
SciPy est un projet visant à unifier et fédérer un ensemble de bibliothèques Python à usage
scientifique. Scipy utilise les tableaux et matrices du module NumPy.
Chacun des ces sous-modules fournit un ensemble de fonctions et de classes qui peuvent être
utilisées pour résoudre des problèmes variés en lien avec le calcul scientifique.
Au cas où un seul sous-module sera utilisé, il est possible de l'importer comme suit :
Intégration
∫ f ( x )d x .
a
Plusieurs méthodes fournissant une valeur approchée d'une intégrale sont implémentées dans
Scipy.
Par exemple romberg calcule une valeur approchée de l'intégral à l’aide de la méthode de
Romberg, trapz calcule une valeur approchée de l'intégral à l’aide de la méthode des trapèzes,
simps calcule une intégrale à l'aide de la méthode de Simpson.
Dans nos exemples on utilisera quad, (dblquad and tplquad) qui permettent de calculer des
intégrales simples, (doubles ou triples respectivement) avec une méthode non spécifiée,
optimisée par Python.
Une façon de calculer une intégrale avec Scipy, est donc de définr une fonction et puis lui
appliquer la méthode quad.
from scipy import integrate
∫ a x 2 +b d x .
0
a = 2
b = 1
I = integrate.quad(f, 0, 1, args=(a,b))
I
On peut avoir besoin d'utiliser le symbol o o comme borne d'un intégral. Par exemple
oo
f n ( x )=∫ e
− xt n
/t d t .
1
print(expint(3, 1.0))
PS. ll existe déjà une fonction predéfinie expn(n,x) dans le paquetage scipy.special (on
pourrait donc l'importer import scipy.special as special et utiliser
special.expn(3, 1.0) dans l'exemple ci-dessus pour obtenir le même résultat.
Double intégration :
oo oo
I ( n )=∫ ∫ e
− xt n
/t d t d x .
0 1
def I(n):