Реалізація Матричних Перетворень у Python
Розв'язання лінійної системи
Задаємо систему рівнянь:
2x+y=5x−y=1Це переписується як:
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)
Цей код знаходить значення x та y, які задовольняють обидва рівняння.
Чому це важливо: розв'язання систем рівнянь є основою для науки про дані — від побудови лінійних моделей до розв'язання оптимізаційних задач.
Застосування лінійних перетворень
Визначаємо вектор:
v = np.array([[2], [3]])
Далі застосовуємо два перетворення:
Масштабування
Розтягуємо x у 2 рази та стискаємо y у 0.5 разів:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Це виконує обчислення:
S⋅v=[2000.5][23]=[41.5]Обертання
Повертаємо вектор на 90° проти годинникової стрілки за допомогою матриці обертання:
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
rotated_v = R @ v
Результат:
R⋅v=[01−10][23]=[−32]Візуалізація перетворень
За допомогою matplotlib
будуємо кожен вектор з початку координат, підписуючи їх координати:
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()
Чому це важливо: робочі процеси в науці про дані часто включають перетворення, наприклад:
- Метод головних компонент — обертає дані;
- Нормалізація ознак — масштабує осі;
- Зниження розмірності — проєкції.
Візуалізуючи вектори та їхні перетворення, ми бачимо, як матриці буквально переміщують і змінюють форму даних у просторі.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 1.96
Реалізація Матричних Перетворень у Python
Свайпніть щоб показати меню
Розв'язання лінійної системи
Задаємо систему рівнянь:
2x+y=5x−y=1Це переписується як:
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)
Цей код знаходить значення x та y, які задовольняють обидва рівняння.
Чому це важливо: розв'язання систем рівнянь є основою для науки про дані — від побудови лінійних моделей до розв'язання оптимізаційних задач.
Застосування лінійних перетворень
Визначаємо вектор:
v = np.array([[2], [3]])
Далі застосовуємо два перетворення:
Масштабування
Розтягуємо x у 2 рази та стискаємо y у 0.5 разів:
S = np.array([[2, 0],
[0, 0.5]])
scaled_v = S @ v
Це виконує обчислення:
S⋅v=[2000.5][23]=[41.5]Обертання
Повертаємо вектор на 90° проти годинникової стрілки за допомогою матриці обертання:
theta = np.pi / 2
R = np.array([[np.cos(theta), -np.sin(theta)],
[np.sin(theta), np.cos(theta)]])
rotated_v = R @ v
Результат:
R⋅v=[01−10][23]=[−32]Візуалізація перетворень
За допомогою matplotlib
будуємо кожен вектор з початку координат, підписуючи їх координати:
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()
Чому це важливо: робочі процеси в науці про дані часто включають перетворення, наприклад:
- Метод головних компонент — обертає дані;
- Нормалізація ознак — масштабує осі;
- Зниження розмірності — проєкції.
Візуалізуючи вектори та їхні перетворення, ми бачимо, як матриці буквально переміщують і змінюють форму даних у просторі.
Дякуємо за ваш відгук!