Comment créer et initialiser une matrice en python avec numpy ?

Published: 07 mars 2019

DMCA.com Protection Status

Pour créer et initialiser une matrice en python il existe plusieurs solutions avec le module numpy, quelques exemples:

Créer une simple matrice

Créer une matrice 1D contenant 9 éléments:

\begin{equation}
A = \left( \begin{array}{ccc}
1&7& 3& 7& 3& 6& 4& 9& 5
\end{array}\right)
\end{equation}

>>> import numpy as np
>>> A = np.array([1,7,3,7,3,6,4,9,5])
>>> A
array([1, 7, 3, 7, 3, 6, 4, 9, 5])

Astuce: si on vérifie la forme ('shape') de la matrice ici on obtient (9,) et pas (9,1):

>>> A.shape
(9,)

cela peut entrainer des erreurs par la suite si on veut par exemple concatener deux matrices. Pour ajouter un axe et avoir une matrice de dimension (9,1), on peut alors faire comme ceci (ref):

>>> A = A[:, np.newaxis]
>>> A
array([[1],
       [7],
       [3],
       [7],
       [3],
       [6],
       [4],
       [9],
       [5]])
>>> A.shape
(9, 1)

Créer une matrice de dimension (3,3)

\begin{equation}
A = \left( \begin{array}{ccc}
4 & 7 & 6\\
1 & 2 & 5\\
9 & 3 & 8
\end{array}\right)
\end{equation}

avec numpy

>>> A = np.array([[4,7,6],[1,2,5],[9,3,8]])
>>> A
array([[4, 7, 6],
       [1, 2, 5],
       [9, 3, 8]])
>>> A.shape
(3, 3)

Autre exemple avec une matrice de dimension (3,3,2)

>>> A = np.array([[[4,1],[7,1],[6,1]],[[1,1],[2,1],[5,1]],[[9,1],[3,1],[8,1]]])
>>> A
array([[[4, 1],
        [7, 1],
        [6, 1]],

       [[1, 1],
        [2, 1],
        [5, 1]],

       [[9, 1],
        [3, 1],
        [8, 1]]])
>>> A.shape
(3, 3, 2)

Créer une matrice avec des zeros

Pour créer une matrice avec des zeros on peut utiliser la fonction numpy zeros

\begin{equation}
A = \left( \begin{array}{ccc}
0&0& 0& 0& 0& 0& 0& 0& 0&0
\end{array}\right)
\end{equation}

>>> A = np.zeros((10))
>>> A
array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])
>>> A.shape
(10,)

Autre exemple

\begin{equation}
A = \left( \begin{array}{ccc}
0 & 0 & 0\\
0 & 0 & 0\\
0 & 0 & 0
\end{array}\right)
\end{equation}

>>> A = np.zeros((3,3))
>>> A
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> A.shape
(3, 3)

Créer une matrice avec des 1

Pour créer une matrice avec des 1 on peut utiliser la fonction numpy ones

\begin{equation}
A = \left( \begin{array}{ccc}
1&1& 1& 1& 1& 1& 1& 1& 1&1
\end{array}\right)
\end{equation}

>>> A = np.ones((10))
>>> A
array([ 1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.])
>>> A.shape
(10,)

Autre exemple

\begin{equation}
A = \left( \begin{array}{ccc}
1 & 1 & 1\\
1 & 1 & 1\\
1 & 1 & 1
\end{array}\right)
\end{equation}

>>> A = np.ones((3,3))
>>> A
array([[ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> A.shape
(3, 3)

Créer une matrice à partir d'une séquence de nombres (arange)

Pour créer une matrice à partir d'une suite de nombre entre 1 et 10 par exemple on peut utiliser la fonction numpy arange

\begin{equation}
A = \left( \begin{array}{ccc}
1&2& 3& 4& 5& 6& 7& 8& 9
\end{array}\right)
\end{equation}

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

Autre exemple an précisant un pas de 2:

\begin{equation}
A = \left( \begin{array}{ccc}
1&3& 5& 7& 9
\end{array}\right)
\end{equation}

>>> A = np.arange(1,10,2)
>>> A
array([1, 3, 5, 7, 9])

Autre exemple

\begin{equation}
A = \left( \begin{array}{ccc}
1&6& 11& 16
\end{array}\right)
\end{equation}

>>> A = np.arange(1,20,5)
>>> A
array([ 1,  6, 11, 16])
>>> A.shape
(4,)

On peut ensuite redimensionner la matrice avec reshape:

>>> A = A.reshape(2,2)
>>> A
array([[ 1,  6],
       [11, 16]])
>>> A.shape
(2, 2)

\begin{equation}
A = \left( \begin{array}{ccc}
1 & 6 \\
11 & 16
\end{array}\right)
\end{equation}

Créer une matrice à partir d'une séquence de nombres (linspace)

Si on veut créer par exemple 20 nombres entre [1,10[ on peut utiliser la fonction numpy linspace

>>> A = np.linspace(1,10,20)
>>> A
array([  1.        ,   1.47368421,   1.94736842,   2.42105263,
         2.89473684,   3.36842105,   3.84210526,   4.31578947,
         4.78947368,   5.26315789,   5.73684211,   6.21052632,
         6.68421053,   7.15789474,   7.63157895,   8.10526316,
         8.57894737,   9.05263158,   9.52631579,  10.        ])
>>> A.shape
(20,)

Créer une matrice avec des entiers aléatoires

Pour créer une matrice avec des entiers aléatoires on peut utiliser la fonction numpy randint. Exemple avec une matrice de dimension 10 des entiers entre [0,10[

>>> A = np.random.randint(10, size=10)
>>> A
array([9, 5, 0, 2, 0, 6, 6, 6, 5, 5])
>>> A.shape
(10,)

Exemple avec une matrice de dimension (3,3) des entiers entre [0,10[

>>> A = np.random.randint(10, size=(3,3))
>>> A
array([[2, 4, 7],
       [7, 5, 4],
       [0, 9, 4]])
>>> A.shape
(3, 3)

Exemple avec une matrice de dimension (3,3) des entiers entre [0,100[

>>> A = np.random.randint(100, size=(3,3))
>>> A
array([[83, 51, 95],
       [74,  7, 70],
       [49, 18,  8]])

Créer une matrice avec des nombres réels aléatoires

>>> A = A * 0.01
>>> A
array([[ 0.83,  0.51,  0.95],
       [ 0.74,  0.07,  0.7 ],
       [ 0.49,  0.18,  0.08]])
>>> type(A)
<class 'numpy.ndarray'>

>>> A.dtype
dtype('float64')

Créer une matrice avec des chaînes de caractères

Exemple de comment créer une matrice avec des chaînes de caractères

>>> A = np.array(('Hello','Hola','Bonjour'))
>>> A
array(['Hello', 'Hola', 'Bonjour'], 
      dtype='<U7')
>>> A.dtype
dtype('<U7')

Note: attention ici la taille maximum des éléments de la matrice A est 7 car l'élément le plus grand est 'bonjour' avec len('Bonjour') = 7. Si on veut modifier un élément de la matrice avec une chaîne de caractères de taille > 7

>>> A[0] = 'How are you ?'
>>> A
array(['How are', 'Hola', 'Bonjour'], 
  dtype='<U7')

il sera tronqué. Il faut alors changer le type, exemple:

>>> A = A.astype('<U20')
>>> A[0] = 'How are you ?'
>>> A
array(['How are you ?', 'Hola', 'Bonjour'], dtype='<U20')

Créer une matrice unité

Pour créer une matrice unité il y a la fonction numpy identity:

\begin{equation}
I = \left( \begin{array}{ccc}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1
\end{array}\right)
\end{equation}

Exemple

>>> import numpy as np
>>> I = np.identity(3)
>>> I
array([[ 1.,  0.,  0.],
       [ 0.,  1.,  0.],
       [ 0.,  0.,  1.]])

Références