Comment effectuer des opérations mathématiques sur les éléments d'une matrice en python ?

Daidalos August 01, 2019


Quelques exemples sur comment effectuer directement des opérations mathématiques sur les éléments d'une matrice en python ("element-wise operations"):

Additionner un nombre à tous les éléments d'une matrice

Soit la matrice A suivante:

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

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

pour ajouter le même nombre à tous les éléments d'une matrice on peut faire comme ceci

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

ou

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

Autre exemple:

>>> B = np.arange(10,19).reshape(3,3)
>>> B
array([[10, 11, 12],
       [13, 14, 15],
       [16, 17, 18]])
>>> A + B
array([[10, 12, 14],
       [16, 18, 20],
       [22, 24, 26]])

Soustraire un nombre à tous les éléments d'une matrice

Même chose pour la soustraction:

>>> import numpy as np
>>> A = np.arange(9).reshape(3,3)

pour soustraire le même nombre à tous les éléments d'une matrice on peut faire comme ceci

>>> A - 1
array([[-1,  0,  1],
       [ 2,  3,  4],
       [ 5,  6,  7]])

ou

>>> B = np.ones(9).reshape(3,3)
>>> A - B
array([[-1.,  0.,  1.],
       [ 2.,  3.,  4.],
       [ 5.,  6.,  7.]])

Autre exemple

>>> B = np.arange(10,19).reshape(3,3)
>>> B
array([[10, 11, 12],
       [13, 14, 15],
       [16, 17, 18]])
>>> A - B
array([[-10, -10, -10],
       [-10, -10, -10],
       [-10, -10, -10]])

Multiplier les éléments d'une matrice par une constante

Exemple de comment multiplier les éléments d'une matrice par une constante

>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> A * 2
array([[ 0,  2,  4],
       [ 6,  8, 10],
       [12, 14, 16]])

Multiplier les éléments d'une matrice par les éléments d'une autre matrice

>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> B = np.arange(10,19).reshape(3,3)
>>> B
array([[10, 11, 12],
       [13, 14, 15],
       [16, 17, 18]])
>>> A * B
array([[  0,  11,  24],
       [ 39,  56,  75],
       [ 96, 119, 144]])

Élever au carré les éléments d'une matrice

>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> A ** 2
array([[ 0,  1,  4],
       [ 9, 16, 25],
       [36, 49, 64]])
>>> np.sqrt(A**2)
array([[ 0.,  1.,  2.],
       [ 3.,  4.,  5.],
       [ 6.,  7.,  8.]])

Racine carré sur les éléments d'une matrice

Pour obtenir appliquer une racine carré sur les éléments d'une matrice on peut utiliser la fonction numpy np.sqrt()

>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> A ** 2
array([[ 0,  1,  4],
       [ 9, 16, 25],
       [36, 49, 64]])
>>> np.sqrt(A**2)
array([[ 0.,  1.,  2.],
       [ 3.,  4.,  5.],
       [ 6.,  7.,  8.]])

Créer une fonction qui modifie les éléments d'une matrice

>>> A = np.arange(9).reshape(3,3)
>>> A
array([[0, 1, 2],
       [3, 4, 5],
       [6, 7, 8]])
>>> def my_custom_function(x):
...     return x**2 + 1
... 
>>> my_custom_function(A)
array([[ 1,  2,  5],
       [10, 17, 26],
       [37, 50, 65]])

Note: si on veut utiliser des fonctions comme le cosinus, sinus, exp, etc il ne faut pas utiliser le module python math mais utiliser numpy (numpy Mathematical functions):

>>> import math
>>> def my_custom_function(x):
...     return math.sin(x)
... 
>>> my_custom_function(A)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in my_custom_function
TypeError: only length-1 arrays can be converted to Python scalars

il suffit de remplacer math.sin(x) par np.sin(x) comme dans cet exemple

>>> def my_custom_function(x):
...     return np.sin(x)
... 
>>> my_custom_function(A)
array([[ 0.        ,  0.84147098,  0.90929743],
       [ 0.14112001, -0.7568025 , -0.95892427],
       [-0.2794155 ,  0.6569866 ,  0.98935825]])

On peut aussi obtenir le même résultat directement:

>>> np.sin(A)
array([[ 0.        ,  0.84147098,  0.90929743],
       [ 0.14112001, -0.7568025 , -0.95892427],
       [-0.2794155 ,  0.6569866 ,  0.98935825]])

Produit matriciel sur les éléments d'une matrice

>>> import numpy as np
>>> A = np.arange(4).reshape(2,2)
>>> A = np.array([A[:],A[:]*2,A[:]*3])
>>> A
array([[[0, 1],
        [2, 3]],

       [[0, 2],
        [4, 6]],

       [[0, 3],
        [6, 9]]])
>>> B = np.array((4,6))
>>> B
array([4, 6])
>>> B @ A
array([[12, 22],
       [24, 44],
       [36, 66]])

Autre exemple

>>> A = np.arange(3).reshape(3,1)
>>> A
array([[0],
       [1],
       [2]])
>>> B = np.arange(3).reshape(1,3)
>>> B
array([[0, 1, 2]])
>>> B @ A
array([[5]])

Multiplier les éléments d'une ligne par les éléments d'une autre matrice

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

Multiplier les éléments d'une colonne par les éléments d'une autre matrice

>>> C = B[:,np.newaxis]
>>> C
array([[0],
       [1],
       [2]])
>>> np.multiply(A,C)
array([[ 0,  0,  0],
       [ 3,  4,  5],
       [12, 14, 16]])

Références

Liens Site
Introduction to Python Operator data-flair.training
numpy.multiply stackoverflow
Elementwise multiplication of NumPy arrays of matrices stackoverflow
How to get element-wise matrix multiplication (Hadamard product) in numpy? stackoverflow
numpy Mathematical functions docs.scipy.org
What is the purpose of meshgrid in Python / NumPy? stackoverflow
How to merge mesh grid points from two rectangles in python? stackoverflow

Licence


Activity


Google Ads