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
Fantastico!
Completion tasso migliorato a 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!