Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Implémentation de la Transformation Matricielle en Python | Fondements de l'Algèbre Linéaire
Mathématiques pour la Science des Données

bookImplémentation de la Transformation Matricielle en Python

Résolution d’un système linéaire

Nous définissons un système d’équations :

2x+y=5xy=12x + y = 5 \\ x - y = 1

Ceci se réécrit comme suit :

123456789
import numpy as np A = np.array([[2, 1], # Coefficient matrix [1, -1]]) b = np.array([5, 1]) # Constants (RHS) x_solution = np.linalg.solve(A, b) print(x_solution)
copy

Cela permet de trouver les valeurs de xx et yy qui satisfont les deux équations.

Importance : la résolution de systèmes d’équations est fondamentale en science des données, que ce soit pour l’ajustement de modèles linéaires ou la résolution de contraintes d’optimisation.

Application des transformations linéaires

Nous définissons un vecteur :

v = np.array([[2], [3]])

Puis nous appliquons deux transformations :

Homothétie

Nous étirons xx par 2 et comprimons yy par 0,5 :

S = np.array([[2, 0],
              [0, 0.5]])

scaled_v = S @ v

Cela effectue :

Sv=[2000.5][23]=[41.5]S \cdot v = \begin{bmatrix} 2 & 0 \\ 0 & 0.5 \end{bmatrix} \begin{bmatrix} 2 \\ 3 \end{bmatrix} = \begin{bmatrix} 4 \\ 1.5 \end{bmatrix}

Rotation

Nous faisons pivoter le vecteur de 90°90° dans le sens antihoraire à l'aide de la matrice de rotation :

theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
              [np.sin(theta),  np.cos(theta)]])

rotated_v = R @ v

Ce qui donne :

Rv=[0110][23]=[32]R \cdot v = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 2 \\ 3 \end{bmatrix} = \begin{bmatrix} -3 \\ 2 \end{bmatrix}

Visualisation des transformations

À l'aide de matplotlib, chaque vecteur est tracé depuis l'origine, avec ses coordonnées annotées :

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
import numpy as np import matplotlib.pyplot as plt # Define original vector v = np.array([[2], [3]]) # Scaling S = np.array([[2, 0], [0, 0.5]]) scaled_v = S @ v # Rotation theta = np.pi / 2 R = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]]) rotated_v = R @ v # Vizualization origin = np.zeros(2) fig, ax = plt.subplots(figsize=(6, 6)) # Plot original ax.quiver(*origin, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='blue', label='Original') # Plot scaled ax.quiver(*origin, scaled_v[0], scaled_v[1], angles='xy', scale_units='xy', scale=1, color='green', label='Scaled') # Plot rotated ax.quiver(*origin, rotated_v[0], rotated_v[1], angles='xy', scale_units='xy', scale=1, color='red', label='Rotated') # Label vector tips ax.text(v[0][0]+0.2, v[1][0]+0.2, "(2, 3)", color='blue') ax.text(scaled_v[0][0]+0.2, scaled_v[1][0]+0.2, "(4, 1.5)", color='green') ax.text(rotated_v[0][0]-0.6, rotated_v[1][0]+0.2, "(-3, 2)", color='red') # Draw coordinate axes ax.annotate("", xy=(5, 0), xytext=(0, 0), arrowprops=dict(arrowstyle="->", linewidth=1.5)) ax.annotate("", xy=(0, 5), xytext=(0, 0), arrowprops=dict(arrowstyle="->", linewidth=1.5)) ax.text(5.2, 0, "X", fontsize=12) ax.text(0, 5.2, "Y", fontsize=12) ax.set_xlim(-5, 5) ax.set_ylim(-5, 5) ax.set_aspect('equal') ax.grid(True) ax.legend() plt.show()
copy

Pourquoi c'est important : les flux de travail en science des données incluent souvent des transformations, par exemple :

  • Analyse en Composantes Principales - fait pivoter les données ;
  • Normalisation des caractéristiques - met à l'échelle les axes ;
  • Réduction de dimensionnalité - projections.

En visualisant les vecteurs et leurs transformations, on observe comment les matrices déplacent et transforment littéralement les données dans l'espace.

question mark

Quel est le résultat de cette opération ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 6

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Awesome!

Completion rate improved to 1.96

bookImplémentation de la Transformation Matricielle en Python

Glissez pour afficher le menu

Résolution d’un système linéaire

Nous définissons un système d’équations :

2x+y=5xy=12x + y = 5 \\ x - y = 1

Ceci se réécrit comme suit :

123456789
import numpy as np A = np.array([[2, 1], # Coefficient matrix [1, -1]]) b = np.array([5, 1]) # Constants (RHS) x_solution = np.linalg.solve(A, b) print(x_solution)
copy

Cela permet de trouver les valeurs de xx et yy qui satisfont les deux équations.

Importance : la résolution de systèmes d’équations est fondamentale en science des données, que ce soit pour l’ajustement de modèles linéaires ou la résolution de contraintes d’optimisation.

Application des transformations linéaires

Nous définissons un vecteur :

v = np.array([[2], [3]])

Puis nous appliquons deux transformations :

Homothétie

Nous étirons xx par 2 et comprimons yy par 0,5 :

S = np.array([[2, 0],
              [0, 0.5]])

scaled_v = S @ v

Cela effectue :

Sv=[2000.5][23]=[41.5]S \cdot v = \begin{bmatrix} 2 & 0 \\ 0 & 0.5 \end{bmatrix} \begin{bmatrix} 2 \\ 3 \end{bmatrix} = \begin{bmatrix} 4 \\ 1.5 \end{bmatrix}

Rotation

Nous faisons pivoter le vecteur de 90°90° dans le sens antihoraire à l'aide de la matrice de rotation :

theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
              [np.sin(theta),  np.cos(theta)]])

rotated_v = R @ v

Ce qui donne :

Rv=[0110][23]=[32]R \cdot v = \begin{bmatrix} 0 & -1 \\ 1 & 0 \end{bmatrix} \begin{bmatrix} 2 \\ 3 \end{bmatrix} = \begin{bmatrix} -3 \\ 2 \end{bmatrix}

Visualisation des transformations

À l'aide de matplotlib, chaque vecteur est tracé depuis l'origine, avec ses coordonnées annotées :

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
import numpy as np import matplotlib.pyplot as plt # Define original vector v = np.array([[2], [3]]) # Scaling S = np.array([[2, 0], [0, 0.5]]) scaled_v = S @ v # Rotation theta = np.pi / 2 R = np.array([[np.cos(theta), -np.sin(theta)], [np.sin(theta), np.cos(theta)]]) rotated_v = R @ v # Vizualization origin = np.zeros(2) fig, ax = plt.subplots(figsize=(6, 6)) # Plot original ax.quiver(*origin, v[0], v[1], angles='xy', scale_units='xy', scale=1, color='blue', label='Original') # Plot scaled ax.quiver(*origin, scaled_v[0], scaled_v[1], angles='xy', scale_units='xy', scale=1, color='green', label='Scaled') # Plot rotated ax.quiver(*origin, rotated_v[0], rotated_v[1], angles='xy', scale_units='xy', scale=1, color='red', label='Rotated') # Label vector tips ax.text(v[0][0]+0.2, v[1][0]+0.2, "(2, 3)", color='blue') ax.text(scaled_v[0][0]+0.2, scaled_v[1][0]+0.2, "(4, 1.5)", color='green') ax.text(rotated_v[0][0]-0.6, rotated_v[1][0]+0.2, "(-3, 2)", color='red') # Draw coordinate axes ax.annotate("", xy=(5, 0), xytext=(0, 0), arrowprops=dict(arrowstyle="->", linewidth=1.5)) ax.annotate("", xy=(0, 5), xytext=(0, 0), arrowprops=dict(arrowstyle="->", linewidth=1.5)) ax.text(5.2, 0, "X", fontsize=12) ax.text(0, 5.2, "Y", fontsize=12) ax.set_xlim(-5, 5) ax.set_ylim(-5, 5) ax.set_aspect('equal') ax.grid(True) ax.legend() plt.show()
copy

Pourquoi c'est important : les flux de travail en science des données incluent souvent des transformations, par exemple :

  • Analyse en Composantes Principales - fait pivoter les données ;
  • Normalisation des caractéristiques - met à l'échelle les axes ;
  • Réduction de dimensionnalité - projections.

En visualisant les vecteurs et leurs transformations, on observe comment les matrices déplacent et transforment littéralement les données dans l'espace.

question mark

Quel est le résultat de cette opération ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 6
some-alt