Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Matriisimuunnoksen Toteuttaminen Pythonilla | Lineaarialgebran Perusteet
Matematiikka Data-analytiikalle

Matriisimuunnoksen Toteuttaminen Pythonilla

Pyyhkäise näyttääksesi valikon

Lineaarisen yhtälöryhmän ratkaiseminen

Määritellään yhtälöryhmä:

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

Tämä kirjoitetaan uudelleen seuraavasti:

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)

Tämä etsii xx:n ja yy:n arvot, jotka täyttävät molemmat yhtälöt.

Merkityksellisyys: yhtälöryhmien ratkaiseminen on keskeistä data-analytiikassa – aina lineaaristen mallien sovittamisesta optimointirajoitteiden ratkaisemiseen.

Lineaaristen muunnosten soveltaminen

Määritellään vektori:

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

Sitten sovelletaan kahta muunnosta:

Skaalaus

Venytetään xx kaksinkertaiseksi ja puristetaan yy puoleen:

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

scaled_v = S @ v

Tämä suorittaa:

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}

Kierto

Kierretään vektoria 90°90° vastapäivään kiertomatriisin avulla:

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

rotated_v = R @ v

Tulos on:

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}

Muunnosten visualisointi

Käytetään matplotlib-kirjastoa ja piirretään jokainen vektori origosta, koordinaatit merkittyinä:

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()

Miksi tämä on tärkeää: datatieteen työnkulut sisältävät usein muunnoksia, esimerkiksi:

  • Principal Component Analysis – kiertää dataa;
  • Ominaisuuksien normalisointi – skaalaa akseleita;
  • Ulottuvuuksien vähentäminen – projisoinnit.

Visualisoimalla vektoreita ja niiden muunnoksia nähdään, miten matriisit kirjaimellisesti siirtävät ja muokkaavat dataa avaruudessa.

question mark

Mikä on tämän operaation tulos?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 6

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Matriisimuunnoksen Toteuttaminen Pythonilla

Lineaarisen yhtälöryhmän ratkaiseminen

Määritellään yhtälöryhmä:

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

Tämä kirjoitetaan uudelleen seuraavasti:

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)

Tämä etsii xx:n ja yy:n arvot, jotka täyttävät molemmat yhtälöt.

Merkityksellisyys: yhtälöryhmien ratkaiseminen on keskeistä data-analytiikassa – aina lineaaristen mallien sovittamisesta optimointirajoitteiden ratkaisemiseen.

Lineaaristen muunnosten soveltaminen

Määritellään vektori:

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

Sitten sovelletaan kahta muunnosta:

Skaalaus

Venytetään xx kaksinkertaiseksi ja puristetaan yy puoleen:

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

scaled_v = S @ v

Tämä suorittaa:

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}

Kierto

Kierretään vektoria 90°90° vastapäivään kiertomatriisin avulla:

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

rotated_v = R @ v

Tulos on:

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}

Muunnosten visualisointi

Käytetään matplotlib-kirjastoa ja piirretään jokainen vektori origosta, koordinaatit merkittyinä:

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()

Miksi tämä on tärkeää: datatieteen työnkulut sisältävät usein muunnoksia, esimerkiksi:

  • Principal Component Analysis – kiertää dataa;
  • Ominaisuuksien normalisointi – skaalaa akseleita;
  • Ulottuvuuksien vähentäminen – projisoinnit.

Visualisoimalla vektoreita ja niiden muunnoksia nähdään, miten matriisit kirjaimellisesti siirtävät ja muokkaavat dataa avaruudessa.

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 6
some-alt