Implé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=5x−y=1Ceci se réécrit comme suit :
123456789import 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)
Cela permet de trouver les valeurs de x et y 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 x par 2 et comprimons y par 0,5 :
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Cela effectue :
S⋅v=[2000.5][23]=[41.5]Rotation
Nous faisons pivoter le vecteur de 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 :
R⋅v=[01−10][23]=[−32]Visualisation des transformations
À l'aide de matplotlib
, chaque vecteur est tracé depuis l'origine, avec ses coordonnées annotées :
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import 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()
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.
Merci pour vos commentaires !
Demandez à l'IA
Demandez à l'IA
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
Implé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=5x−y=1Ceci se réécrit comme suit :
123456789import 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)
Cela permet de trouver les valeurs de x et y 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 x par 2 et comprimons y par 0,5 :
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Cela effectue :
S⋅v=[2000.5][23]=[41.5]Rotation
Nous faisons pivoter le vecteur de 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 :
R⋅v=[01−10][23]=[−32]Visualisation des transformations
À l'aide de matplotlib
, chaque vecteur est tracé depuis l'origine, avec ses coordonnées annotées :
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647import 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()
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.
Merci pour vos commentaires !