import numpy as npcontenu de ce notebook (notebook à sauter)¶
IMPORTANT
ce notebook est utile aux enseignements de mathématiques
sachez qu’il existe pour vous y référer
sans l’étudier en cours d’informatique
liste des fonctions présentées (succinctement)
| fonctions | comportement |
|---|---|
np.dot | produit de matrice |
np.linalg.norm | normes de matrice |
np.transpose | transposition de matrice |
np.linalg.det | déterminant |
np.linalg.inv | inversion |
np.linalg.eig | valeurs propres |
np.linalg.solve | résolution de système linéaire |
np.eye | matrice identité |
np.diag | matrice diagonale |
introduction et contexte¶
terminologie¶
A = np.array([[2, 3, -7], [6, -4, 5]])
print(A.dtype)
A[0] = np.pi
Aint64
array([[ 3, 3, 3],
[ 6, -4, 5]])les matrices et vecteurs¶
# le code
m, n = 4, 3
A = np.arange(12).reshape(m, n)
print(A)
print(A.ndim)
print(A.shape)[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
2
(4, 3)
# le code
V = np.array([1, -3, 8])
print(V)
print(V.ndim)
print(V.shape)[ 1 -3 8]
1
(3,)
le produit d’une matrice et d’un vecteur numpy.dot¶
m, n = 4, 3
A = np.arange(12).reshape(m, n)
print(A)
V = np.arange(3).reshape(n)
print(V)
print(np.dot(A, V))
print(A.dot(V))[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[0 1 2]
[ 5 14 23 32]
[ 5 14 23 32]
le produit de deux matrices numpy.dot¶
# le code
m, n = 3, 4
A = np.arange(12).reshape(m, n)
print(A)
B = np.arange(10, 22).reshape(n, m)
print(B)
np.dot(A, B)
A.dot(B)[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[10 11 12]
[13 14 15]
[16 17 18]
[19 20 21]]
array([[102, 108, 114],
[334, 356, 378],
[566, 604, 642]])produit matriciel avec @ et numpy.matmul¶
# le code
np.matmul(A, B)
A @ Barray([[102, 108, 114],
[334, 356, 378],
[566, 604, 642]])le produit scalaire¶
#le code
V1 = np.array([1, -3, 8])
V1.shape # (3,)
V1array([ 1, -3, 8])#le code
V2 = np.array([-6, 4, -7])
V2.shape # (3,)
V2array([-6, 4, -7])#le code
np.dot(V1, V2)np.int64(-74)la norme de vecteur¶
# le code
V = np.array([1, -3, 8])
np.linalg.norm(V)
np.sqrt(np.dot(V, V))
np.sqrt(np.sum(V*V))np.float64(8.602325267042627)la transposée d’une matrice¶
# le code
A = np.arange(1, 13).reshape(4, 3)
print(A)
print(np.transpose(A))
print(A.T)[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[ 1 4 7 10]
[ 2 5 8 11]
[ 3 6 9 12]]
[[ 1 4 7 10]
[ 2 5 8 11]
[ 3 6 9 12]]
les matrices identité¶
# le code
I = np.eye(5)
print(I.shape)
print(I.dtype)(5, 5)
float64
le déterminant d’une matrice¶
# le code
A = 2*np.eye(3)
np.linalg.det(A)np.float64(7.999999999999998)#le code
B = np.array([[2, 3, 4], [5, 6, 7]])
try:
np.linalg.det(B)
except np.linalg.LinAlgError as e:
print(e)Last 2 dimensions of the array must be square
les matrices diagonales¶
# le code
A = np.random.randint(-100, 100, size=(3, 4))
print(A)
np.diag(A)[[ 33 -53 -10 -23]
[ 71 63 6 -35]
[ 20 -76 26 27]]
array([33, 63, 26])# le code
l = np.array([9, -45, 6])
np.diag(l)array([[ 9, 0, 0],
[ 0, -45, 0],
[ 0, 0, 6]])la trace d’une matrice¶
# le code
A = np.arange(9).reshape(3, 3)
print(A)
print(np.trace(A))
print(np.sum(np.diag(A)))[[0 1 2]
[3 4 5]
[6 7 8]]
12
12
l’inversion d’une matrice¶
# le code
R = np.array([[0, 1, 0], [0, 0, 1], [1, 0, 0]], dtype=float)
print(R)
IR = np.linalg.inv(R)
print(IR)
print(np.all(np.dot(R, IR) == np.eye(3)))[[0. 1. 0.]
[0. 0. 1.]
[1. 0. 0.]]
[[0. 0. 1.]
[1. 0. 0.]
[0. 1. 0.]]
True
calculs approchés (avec tolérance)¶
A = np.random.random(size=(3, 3))
I = np.eye(len(A))
A_1 = np.linalg.inv(A)
np.all(I == np.dot(A_1, A))
print(np.dot(A_1, A))
np.all(np.isclose(np.dot(A_1, A), I))[[ 1.00000000e+00 -7.13470327e-17 -7.95430430e-17]
[ 3.41760771e-18 1.00000000e+00 -4.48302722e-18]
[ 2.68335693e-17 -2.13714966e-17 1.00000000e+00]]
np.True_les valeurs propres d’une matrice (eigen values)¶
# le code
M = np.random.random(size=(3, 3))
alpha, v = np.linalg.eig(M)
alpha.shape, v.shape
v0 = v[:, 0] # le premier vecteur propre
alpha0 = alpha[0] # la première valeur propre
np.all(np.isclose(np.dot(M, v0), alpha0*v0))np.True_# votre code icirésolution d’un système linéaire¶
# le code
A = np.random.random(size=(3, 3))
b = np.array([1, 2, 3])
x = np.linalg.solve(A, b)
np.all(np.isclose(np.dot(A, x), b))np.True_