Implementazione della Trasformazione di Matrici in Python
Risoluzione di un sistema lineare
Definiamo un sistema di equazioni:
2x+y=5x−y=1Questo viene riscritto come:
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)
Questo trova i valori di x e y 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 x di 2 e comprimiamo y di 0,5:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Questo esegue:
S⋅v=[2000.5][23]=[41.5]Rotazione
Ruotiamo il vettore di 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:
R⋅v=[01−10][23]=[−32]Visualizzazione delle Trasformazioni
Utilizzando matplotlib, vengono tracciati i vettori dall'origine, con le rispettive coordinate etichettate:
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()
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.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione
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
Implementazione della Trasformazione di Matrici in Python
Scorri per mostrare il menu
Risoluzione di un sistema lineare
Definiamo un sistema di equazioni:
2x+y=5x−y=1Questo viene riscritto come:
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)
Questo trova i valori di x e y 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 x di 2 e comprimiamo y di 0,5:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Questo esegue:
S⋅v=[2000.5][23]=[41.5]Rotazione
Ruotiamo il vettore di 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:
R⋅v=[01−10][23]=[−32]Visualizzazione delle Trasformazioni
Utilizzando matplotlib, vengono tracciati i vettori dall'origine, con le rispettive coordinate etichettate:
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()
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.
Grazie per i tuoi commenti!