Các vectơ cực kỳ quan trọng trong đại số tuyến tính và hơn thế nữa. Một trong những biểu diễn trực quan phổ biến nhất của một vectơ là mũi tên. Ở đây chúng tôi sẽ học cách vẽ các vectơ với matplotlib. Hình ảnh tiêu đề cho thấy hai vectơ và tổng của chúng. Bước đầu tiên, chúng tôi sẽ vẽ các vectơ có nguồn gốc từ 0, được hiển thị bên dưới. import matplotlib.pyplot as plt
import numpy as np
vectors = np.array(([2, 0], [3, 2]))
vector_addition = vectors[0] + vectors[1]
vectors = np.append(vectors, vector_addition[None,:], axis=0)
tail = [0, 0]
fig, ax = plt.subplots(1)
ax.quiver(*tail,
vectors[:, 0],
vectors[:, 1],
scale=1,
scale_units='xy',
angles = 'xy',
color=['g', 'r', 'k'])
ax.set_xlim((-1, vectors[:,0].max()+1))
ax.set_ylim((-1, vectors[:,1].max()+1))
Chúng tôi có hai vectơ được lưu trữ trong mảng vectors của chúng tôi. Đó là [2, 0] và [3, 2]. Cả theo thứ tự của [x, y] như bạn có thể thấy từ hình ảnh. Chúng ta có thể thực hiện bổ sung vectơ giữa hai bằng cách thêm vectors[0] + vectors[1]. Sau đó, chúng tôi sử dụng np.append vì vậy chúng tôi có cả ba vectơ trong cùng một mảng. Bây giờ chúng tôi xác định nguồn gốc trong tail, bởi vì chúng tôi sẽ muốn đuôi của mũi tên được đặt tại [0, 0]. Sau đó, chúng tôi tạo ra hình và trục để vẽ với plt.subplots(). Bản thân âm mưu có thể được thực hiện với một cuộc gọi đến phương thức ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 0. Nhưng đó là một cuộc gọi, với rất nhiều thông số, vì vậy hãy để Lôi đi qua nó.
Đầu tiên, chúng ta cần xác định nguồn gốc, vì vậy chúng ta vượt qua ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 1. Tại sao dấu hoa thị? ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 0 thực sự có hai tham số cho nguồn gốc, X và Y. Dấu hoa thị khiến [0, 0] được giải nén vào hai tham số đó. Tiếp theo, chúng tôi vượt qua tọa độ X (ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 3) và sau đó là tọa độ y (ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 4) của các vectơ của chúng tôi. Ba tham số tiếp theo ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 5, ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 6 và ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 7 là cần thiết để làm cho độ dài mũi tên khớp với các số thực. Theo mặc định, các mũi tên được chia tỷ lệ, dựa trên mức trung bình của tất cả các vectơ được vẽ. Chúng tôi thoát khỏi loại quy mô đó. Hãy thử loại bỏ một số trong số đó để có được một ý tưởng tốt hơn về ý tôi. Cuối cùng, chúng tôi vượt qua ba màu, một cho mỗi mũi tên.
Vì vậy, những gì chúng ta cần để vẽ đầu vào các vectơ thẳng hàng như trong hình ảnh tiêu đề? Chúng ta chỉ cần vượt qua các vectơ nơi nguồn gốc là vectơ khác.
ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r'])
Điều này rất đơn giản vì nó là phương pháp run tương tự nhưng nó phức tạp vì cú pháp lập chỉ mục. Bây giờ, chúng tôi không còn giải nén ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 1. Thay vào đó chúng tôi vượt qua nguồn gốc x và y riêng biệt. Trong ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 9 0 có được tọa độ x. -1 đảo ngược mảng. Nếu chúng ta không đảo ngược, mỗi vectơ sẽ là nguồn gốc của riêng nó. 1 bỏ qua vectơ đầu tiên, là vectơ tổng hợp vì chúng tôi đảo ngược. vectors0 cung cấp cho chúng tôi các điều phối y. Cuối cùng, chúng ta chỉ cần bỏ qua vectơ tổng hợp khi chúng ta vượt qua cường độ x và y. Phần còn lại là như nhau.
À chính nó đấy. Thật không may, ax.quiver(vectors[1::-1,0], vectors[1::-1,1], vectors[:2,0], vectors[:2,1], scale=1, scale_units='xy', angles = 'xy', color=['g', 'r']) 0 chỉ hoạt động cho các vectơ 2D. Nó cũng được thực hiện cụ thể để trình bày các vectơ có nguồn gốc chung. Trường hợp sử dụng chính của nó là để vẽ các trường vector. Đây là lý do tại sao một số âm mưu ở đây cảm thấy cồng kềnh. Ngoài ra còn có vectors2 đơn giản hơn nhưng chỉ tạo một mũi tên cho mỗi cuộc gọi phương thức. Tôi hy vọng bài viết này là hữu ích cho bạn. Hãy cho tôi biết nếu bạn có những cách khác để vẽ các vectơ.