Les vecteurs et matrices

Les listes peuvent servir de vecteur et matrices. Mais peu de fonctions mathématiques sont applicables sur des listes. En plus, il faudra utiliser un itérateur chaque fois ce qui prendra du temps. On utilise plutôt les array de numpy pour les vecteurs et matrices. On peut créer un array à partir d’une liste:

[1]:
import numpy as np

l = [1,2,3]
a = np.array(l)
a
[1]:
array([1, 2, 3])
[2]:
a.shape
[2]:
(3,)
[3]:
a[0]
[3]:
1

On peut créer des array vides, avec des 1 ou zero

[5]:
x = np.ones((1,3))
x
[5]:
(array([[1., 1., 1.]]), array([[1.63437886, 0.55950035, 0.12555924]]))
[4]:
x = np.zeros((1,10))
x
[4]:
array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

Une fonction très utile permet de créer une grille sur un interval donné par un certain nombre de points:

[9]:
x = np.linspace(0,1,9)
x
[9]:
array([0.   , 0.125, 0.25 , 0.375, 0.5  , 0.625, 0.75 , 0.875, 1.   ])

ou en nombre entier

[8]:
x = np.arange(1,11)
x
[8]:
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10])

Les opérateurs

Plusieurs opérateurs matriciels et vectorisés existent avec numpy. Voici la multiplication:

[11]:
x = np.array([2,2,2])
y = np.array([1,1,1])

Un produit élément par élément

[12]:
x*y
[12]:
array([2, 2, 2])

Un produit vectoriel

[19]:
np.dot(x,y)
[19]:
6

Avec une notation plus légerte

[20]:
x @ y
[20]:
6

Un exemple de multiplication matricielle

[42]:
y = np.array([1,1,1])
y
[42]:
array([1, 1, 1])
[43]:
x = np.array([[1,2,3],[4,5,6]])
x
[43]:
array([[1, 2, 3],
       [4, 5, 6]])
[44]:
x.shape,y.shape
[44]:
((2, 3), (3,))
[45]:
x @ y
[45]:
array([ 6, 15])

Transformation de matrices

L’équivalent de l’opérateur vec():

[46]:
x.reshape((6,1))
[46]:
array([[1],
       [2],
       [3],
       [4],
       [5],
       [6]])

La transposition se fait simplement…

[48]:
x.T
[48]:
array([[1, 4],
       [2, 5],
       [3, 6]])
[47]:
x.transpose()
[47]:
array([[1, 4],
       [2, 5],
       [3, 6]])

Les extractions

[55]:
x[:1,:]
[55]:
array([[1, 2, 3]])
[54]:
x[0,:2]
[54]:
array([1, 2])
[59]:
x = np.eye(4)
x,np.diagonal(x)
[59]:
(array([[1., 0., 0., 0.],
        [0., 1., 0., 0.],
        [0., 0., 1., 0.],
        [0., 0., 0., 1.]]),
 array([1., 1., 1., 1.]))

Inverse et decompositions

[60]:
x = np.array([[0.8,0.2],[0.2,0.8]])
x
[60]:
array([[0.8, 0.2],
       [0.2, 0.8]])

Inverse d’une matrice

[61]:
np.linalg.inv(x)
[61]:
array([[ 1.33333333, -0.33333333],
       [-0.33333333,  1.33333333]])

Décomposition de Cholesky

[62]:
np.linalg.cholesky(x)
[62]:
array([[0.89442719, 0.        ],
       [0.2236068 , 0.8660254 ]])

Valeurs et vecteurs propres (eigenvalues et vecteurs)

[63]:
np.linalg.eig(x)
[63]:
(array([1. , 0.6]),
 array([[ 0.70710678, -0.70710678],
        [ 0.70710678,  0.70710678]]))