Implementering af Matrixtransformation i Python
Løsning af et lineært ligningssystem
Vi definerer et ligningssystem:
2x+y=5x−y=1Dette omskrives 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)
Dette finder værdierne af x og y, der opfylder begge ligninger.
Hvorfor dette er vigtigt: Løsning af ligningssystemer er grundlæggende i datavidenskab – fra tilpasning af lineære modeller til løsning af optimeringsbetingelser.
Anvendelse af lineære transformationer
Vi definerer en vektor:
v = np.array([[2], [3]])
Derefter anvendes to transformationer:
Skalering
Vi strækker x med 2 og komprimerer y med 0,5:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Dette udfører:
S⋅v=[2000.5][23]=[41.5]Rotation
Vi roterer vektoren 90° mod uret ved hjælp af rotationsmatricen:
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
rotated_v = R @ v
Dette giver:
R⋅v=[01−10][23]=[−32]Visualisering af transformationerne
Ved brug af matplotlib
plottes hver vektor fra origo, med deres koordinater markeret:
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()
Hvorfor dette er vigtigt: datastrømsarbejdsgange omfatter ofte transformationer, for eksempel:
- Principal Component Analysis – roterer data;
- Feature-normalisering – skalerer akser;
- Dimensionalitetsreduktion – projektioner.
Ved at visualisere vektorer og deres transformationer ser vi, hvordan matricer bogstaveligt talt flytter og omformer data i rummet.
Tak for dine kommentarer!
Spørg AI
Spørg AI
Spørg om hvad som helst eller prøv et af de foreslåede spørgsmål for at starte vores chat
Awesome!
Completion rate improved to 1.96
Implementering af Matrixtransformation i Python
Stryg for at vise menuen
Løsning af et lineært ligningssystem
Vi definerer et ligningssystem:
2x+y=5x−y=1Dette omskrives 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)
Dette finder værdierne af x og y, der opfylder begge ligninger.
Hvorfor dette er vigtigt: Løsning af ligningssystemer er grundlæggende i datavidenskab – fra tilpasning af lineære modeller til løsning af optimeringsbetingelser.
Anvendelse af lineære transformationer
Vi definerer en vektor:
v = np.array([[2], [3]])
Derefter anvendes to transformationer:
Skalering
Vi strækker x med 2 og komprimerer y med 0,5:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Dette udfører:
S⋅v=[2000.5][23]=[41.5]Rotation
Vi roterer vektoren 90° mod uret ved hjælp af rotationsmatricen:
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
rotated_v = R @ v
Dette giver:
R⋅v=[01−10][23]=[−32]Visualisering af transformationerne
Ved brug af matplotlib
plottes hver vektor fra origo, med deres koordinater markeret:
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()
Hvorfor dette er vigtigt: datastrømsarbejdsgange omfatter ofte transformationer, for eksempel:
- Principal Component Analysis – roterer data;
- Feature-normalisering – skalerer akser;
- Dimensionalitetsreduktion – projektioner.
Ved at visualisere vektorer og deres transformationer ser vi, hvordan matricer bogstaveligt talt flytter og omformer data i rummet.
Tak for dine kommentarer!