Implementering av Matristransformation i Python
Lösning av ett linjärt ekvationssystem
Vi definierar ett ekvationssystem:
2x+y=5x−y=1Detta skrivs om som:
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)
Detta hittar värdena på x och y som uppfyller båda ekvationerna.
Varför detta är viktigt: att lösa ekvationssystem är grundläggande inom datavetenskap – från anpassning av linjära modeller till lösning av optimeringsvillkor.
Tillämpning av linjära transformationer
Vi definierar en vektor:
v = np.array([[2], [3]])
Sedan tillämpar vi två transformationer:
Skalning
Vi sträcker x med 2 och komprimerar y med 0,5:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Detta utför:
S⋅v=[2000.5][23]=[41.5]Rotation
Vi roterar vektorn 90° moturs med hjälp av rotationsmatrisen:
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
rotated_v = R @ v
Detta ger:
R⋅v=[01−10][23]=[−32]Visualisering av transformationerna
Med hjälp av matplotlib
ritas varje vektor från origo, med koordinaterna angivna:
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()
Varför detta är viktigt: arbetsflöden inom datavetenskap inkluderar ofta transformationer, till exempel:
- Principal Component Analysis – roterar data;
- Funktionsnormalisering – skalar axlar;
- Dimensionsreduktion – projektioner.
Genom att visualisera vektorer och deras transformationer ser vi hur matriser bokstavligen flyttar och omformar data i rummet.
Tack för dina kommentarer!
Fråga AI
Fråga AI
Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal
Can you explain how the solution to the system of equations is calculated?
How does the scaling and rotation transformation affect the original vector?
Can you walk me through the visualization code and what each part does?
Awesome!
Completion rate improved to 1.96
Implementering av Matristransformation i Python
Svep för att visa menyn
Lösning av ett linjärt ekvationssystem
Vi definierar ett ekvationssystem:
2x+y=5x−y=1Detta skrivs om som:
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)
Detta hittar värdena på x och y som uppfyller båda ekvationerna.
Varför detta är viktigt: att lösa ekvationssystem är grundläggande inom datavetenskap – från anpassning av linjära modeller till lösning av optimeringsvillkor.
Tillämpning av linjära transformationer
Vi definierar en vektor:
v = np.array([[2], [3]])
Sedan tillämpar vi två transformationer:
Skalning
Vi sträcker x med 2 och komprimerar y med 0,5:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Detta utför:
S⋅v=[2000.5][23]=[41.5]Rotation
Vi roterar vektorn 90° moturs med hjälp av rotationsmatrisen:
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
rotated_v = R @ v
Detta ger:
R⋅v=[01−10][23]=[−32]Visualisering av transformationerna
Med hjälp av matplotlib
ritas varje vektor från origo, med koordinaterna angivna:
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()
Varför detta är viktigt: arbetsflöden inom datavetenskap inkluderar ofta transformationer, till exempel:
- Principal Component Analysis – roterar data;
- Funktionsnormalisering – skalar axlar;
- Dimensionsreduktion – projektioner.
Genom att visualisera vektorer och deras transformationer ser vi hur matriser bokstavligen flyttar och omformar data i rummet.
Tack för dina kommentarer!