Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Implementazione della Trasformazione di Matrici in Python | Fondamenti di Algebra Lineare
Matematica per la Data Science

bookImplementazione della Trasformazione di Matrici in Python

Risoluzione di un sistema lineare

Definiamo un sistema di equazioni:

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

Questo viene riscritto come:

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

Questo trova i valori di xx e yy che soddisfano entrambe le equazioni.

Perché è importante: la risoluzione di sistemi di equazioni è fondamentale nella data science - dall'adattamento di modelli lineari alla risoluzione di vincoli di ottimizzazione.

Applicazione delle Trasformazioni Lineari

Definiamo un vettore:

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

Successivamente applichiamo due trasformazioni:

Scalatura

Allunghiamo xx di 2 e comprimiamo yy di 0,5:

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

scaled_v = S @ v

Questo esegue:

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}

Rotazione

Ruotiamo il vettore di 90°90° in senso antiorario utilizzando la matrice di rotazione:

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

rotated_v = R @ v

Questo produce:

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}

Visualizzazione delle Trasformazioni

Utilizzando matplotlib, vengono tracciati i vettori dall'origine, con le rispettive coordinate etichettate:

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

Perché è importante: i flussi di lavoro in data science spesso includono trasformazioni, ad esempio:

  • Analisi delle Componenti Principali - ruota i dati;
  • Normalizzazione delle feature - scala gli assi;
  • Riduzione della dimensionalità - proiezioni.

Visualizzando i vettori e le loro trasformazioni, si comprende come le matrici spostano e rimodellano letteralmente i dati nello spazio.

question mark

Qual è l'output di questa operazione?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 6

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

Suggested prompts:

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

bookImplementazione della Trasformazione di Matrici in Python

Scorri per mostrare il menu

Risoluzione di un sistema lineare

Definiamo un sistema di equazioni:

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

Questo viene riscritto come:

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

Questo trova i valori di xx e yy che soddisfano entrambe le equazioni.

Perché è importante: la risoluzione di sistemi di equazioni è fondamentale nella data science - dall'adattamento di modelli lineari alla risoluzione di vincoli di ottimizzazione.

Applicazione delle Trasformazioni Lineari

Definiamo un vettore:

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

Successivamente applichiamo due trasformazioni:

Scalatura

Allunghiamo xx di 2 e comprimiamo yy di 0,5:

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

scaled_v = S @ v

Questo esegue:

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}

Rotazione

Ruotiamo il vettore di 90°90° in senso antiorario utilizzando la matrice di rotazione:

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

rotated_v = R @ v

Questo produce:

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}

Visualizzazione delle Trasformazioni

Utilizzando matplotlib, vengono tracciati i vettori dall'origine, con le rispettive coordinate etichettate:

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

Perché è importante: i flussi di lavoro in data science spesso includono trasformazioni, ad esempio:

  • Analisi delle Componenti Principali - ruota i dati;
  • Normalizzazione delle feature - scala gli assi;
  • Riduzione della dimensionalità - proiezioni.

Visualizzando i vettori e le loro trasformazioni, si comprende come le matrici spostano e rimodellano letteralmente i dati nello spazio.

question mark

Qual è l'output di questa operazione?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 4. Capitolo 6
some-alt