Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Implementering af Matrixtransformation i Python | Grundlæggende Lineær Algebra
Matematik for Datavidenskab

bookImplementering af Matrixtransformation i Python

Løsning af et lineært ligningssystem

Vi definerer et ligningssystem:

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

Dette omskrives som:

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

Dette finder værdierne af xx og yy, 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 xx med 2 og komprimerer yy med 0,5:

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

scaled_v = S @ v

Dette udfører:

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

Vi roterer vektoren 90°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:

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}

Visualisering af transformationerne

Ved brug af matplotlib plottes hver vektor fra origo, med deres koordinater markeret:

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

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.

question mark

Hvad er outputtet af denne operation?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 6

Spørg AI

expand

Spørg AI

ChatGPT

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

bookImplementering af Matrixtransformation i Python

Stryg for at vise menuen

Løsning af et lineært ligningssystem

Vi definerer et ligningssystem:

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

Dette omskrives som:

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

Dette finder værdierne af xx og yy, 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 xx med 2 og komprimerer yy med 0,5:

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

scaled_v = S @ v

Dette udfører:

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

Vi roterer vektoren 90°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:

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}

Visualisering af transformationerne

Ved brug af matplotlib plottes hver vektor fra origo, med deres koordinater markeret:

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

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.

question mark

Hvad er outputtet af denne operation?

Select the correct answer

Var alt klart?

Hvordan kan vi forbedre det?

Tak for dine kommentarer!

Sektion 4. Kapitel 6
some-alt