Implementação de Transformação de Matrizes em Python
Resolvendo um Sistema Linear
Definimos um sistema de equações:
2x+y=5x−y=1Isto é reescrito como:
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)
Isso encontra os valores de x e y que satisfazem ambas as equações.
Importância: resolver sistemas de equações é fundamental em ciência de dados — desde o ajuste de modelos lineares até a resolução de restrições de otimização.
Aplicando Transformações Lineares
Definimos um vetor:
v = np.array([[2], [3]])
Em seguida, aplicamos duas transformações:
Escalonamento
Esticamos x por 2 e comprimimos y por 0,5:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Isso realiza:
S⋅v=[2000.5][23]=[41.5]Rotação
Rotacionamos o vetor 90° no sentido anti-horário usando a matriz de rotação:
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
rotated_v = R @ v
Isso resulta em:
R⋅v=[01−10][23]=[−32]Visualizando as Transformações
Utilizando matplotlib, plotamos cada vetor a partir da origem, com suas coordenadas rotuladas:
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()
Por que isso é importante: fluxos de trabalho em ciência de dados frequentemente incluem transformações, por exemplo:
- Análise de Componentes Principais - rotaciona os dados;
- Normalização de características - escala os eixos;
- Redução de dimensionalidade - projeções.
Ao visualizar vetores e suas transformações, é possível observar como as matrizes literalmente movem e remodelam os dados no espaço.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
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
Implementação de Transformação de Matrizes em Python
Deslize para mostrar o menu
Resolvendo um Sistema Linear
Definimos um sistema de equações:
2x+y=5x−y=1Isto é reescrito como:
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)
Isso encontra os valores de x e y que satisfazem ambas as equações.
Importância: resolver sistemas de equações é fundamental em ciência de dados — desde o ajuste de modelos lineares até a resolução de restrições de otimização.
Aplicando Transformações Lineares
Definimos um vetor:
v = np.array([[2], [3]])
Em seguida, aplicamos duas transformações:
Escalonamento
Esticamos x por 2 e comprimimos y por 0,5:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Isso realiza:
S⋅v=[2000.5][23]=[41.5]Rotação
Rotacionamos o vetor 90° no sentido anti-horário usando a matriz de rotação:
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
rotated_v = R @ v
Isso resulta em:
R⋅v=[01−10][23]=[−32]Visualizando as Transformações
Utilizando matplotlib, plotamos cada vetor a partir da origem, com suas coordenadas rotuladas:
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()
Por que isso é importante: fluxos de trabalho em ciência de dados frequentemente incluem transformações, por exemplo:
- Análise de Componentes Principais - rotaciona os dados;
- Normalização de características - escala os eixos;
- Redução de dimensionalidade - projeções.
Ao visualizar vetores e suas transformações, é possível observar como as matrizes literalmente movem e remodelam os dados no espaço.
Obrigado pelo seu feedback!