Quelques exemples sur comment effectuer directement des opérations mathématiques sur les éléments d'une matrice en python ("element-wise operations"):
Table des matières
- Additionner un nombre à tous les éléments d'une matrice
- Soustraire un nombre à tous les éléments d'une matrice
- Multiplier les éléments d'une matrice par une constante
- Multiplier les éléments d'une matrice par les éléments d'une autre matrice
- Élever au carré les éléments d'une matrice
- Racine carré sur les éléments d'une matrice
- Créer une fonction qui modifie les éléments d'une matrice
- Produit matriciel sur les éléments d'une matrice
- Multiplier les éléments d'une ligne par les éléments d'une autre matrice
- Multiplier les éléments d'une colonne par les éléments d'une autre matrice
- Références
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 |