Hướng dẫn vector python
Dẫn nhậpTrong bài trước, Kteam đã GIỚI THIỆU MACHINE LEARNING VÀ CÀI ĐẶT NUMPY , giúp các bạn một phần hiểu được bản chất của Machine Learning. Show
Nội dung chính
Ở bài này chúng ta sẽ cùng nhau tìm hiểu về Ma trận và vector với NumPy. Với bài này, Kteam sẽ giới thiệu đến các bạn một nội dung khá “toán học”, vì thế nếu cảm thấy mệt mỏi, hoa mắt, chóng mặt, trời đất quay cuồng thì hãy nghĩ ngơi một lúc 😊
Nội dungĐể theo dõi bài này tốt nhất bạn cần có kiến thức về:
Trong bài này chúng ta sẽ cùng tìm hiểu về:
Ma trận (matrix) với NumPyĐịnh nghĩaMa trận là một mảng 2 chiều. Trong Python mảng 2 chiều có thể xem là một List của List. Kích thướcKích thước của 1 ma trận = số hàng * số cột. Ví dụ: Ma trận B có 4 hàng và 3 cột: ma trận 4 x 3 Bạn cũng có thể hiểu ma trận là một sheet với số hàng và số cột nhất định trong excel. Vector với NumPyĐịnh nghĩaVector là ma trận với 1 cột và nhiều hàng (n * 1) Kích thướcKích thước của vector (còn được gọi là chiều vector – vector dimension) là số hàng của vector. Ví dụ:
Khởi tạo ma trận và vector với NumPyKhởi tạo ma trậnTa có thể khởi tạo ma trận với NumPy bằng np.array:
Trong đó:
Ví dụ: import numpy as np #import numpy and uses shorter keyword _A = [ [1, 2, 3], [4, 5, 6] ] #array-like object A = np.array(_A) #create a 2-dimension array (matrix) from _A print(A) #print matrix AMa trận này cũng tương tự như bảng sau: Khởi tạo vectorTa khởi tạo vector như ma trận nhưng chỉ có 1 cột (mảng 1 chiều). Ta có thể xem đây là 1 List. import numpy as np #import numpy and uses shorter keyword _a = [ 1, 2, 3, 4 ] #array-like object a = np.array(_a) #create a 1-dimension array (vector) from _a print(‘Vector 4 chiều:’, a) #print vector aVí dụ: Indexing ma trận và vectorTa có thể indexing ma trận và vector theo cấu trúc:
Trong đó:
Ví dụ: import numpy as np #import numpy and uses shorter keyword _a = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] #array-like object a = np.array(_a) #create a 2-dimension array (matrix) from _a print(‘a[0, 1]:’, a[0, 1]) #print a[0, 1] element print(‘a[:, 0]:’, a[:, 0]) #print a[:, 0] elements print(‘a[1, :]:’, a[1, :]) #print a[1, :] elementsCác toán tử với ma trận và vectorCộng và trừ với ma trậnCác phép toán cộng và trừ với ma trận là phép toán “element-wise”, nghĩa là phép toán với từng phần tử tương ứng. Tương tự với trừ: Lưu ý: Để cộng và trừ 2 ma trận, kích thước của cả hai phải giống nhau. Ví dụ : import numpy as np _a = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] _b = [ [ 2, 3, 5], [7, 9, 21] ] a = np.array(_a) #create 2 * 3 matrix: a b = np.array(_b) #create 2 * 3 matrix: b print(‘a + b:’, a + b) #print out a + b print(‘a – b:’, a – b) #print out a - bNhân và chia ma trận với sốĐể nhân và chia ma trận với số, ta chỉ cần nhân/chia từng phần tử của ma trận với số đó. Tương tự với chia: Ví dụ: import numpy as np _a = [ [ 3, 2, 1 ], [ 2, 4, 6 ] ] a = np.array(_a) print(‘a / 2:’, a / 2) #print out a / 2 print(‘a * 2:’, a * 2) #print out a * 2Nhân ma trận với vectorKhi nhân ma trận với vector, ta lấy các phần tử trong cột số của vector nhân lần lượt với các hàng của ma trận để được các tích, sau đó lấy tổng của các tích rồi cho vào từng hàng của kết quả. Chúng ta có thể hình dung như sau: Kết quả của phép tính luôn là một vector. Số cột của ma trận phải bằng với số hàng của vector. Một ma trận m * n nhân với một vector n * 1sẽ có tích là một vector m * 1 Phân tíchĐầu tiên, ta xoay ngang vector lại thành Sau đó nhân lần lượt từng dòng của ma trận với : Cuối cùng lấy tổng của từng hàng: Phép nhân ma trận – vector trong NumPyTrong NumPy, để nhân ma trận với vector như trên, ta có thể dùng:
Từ phiên bản 3.5 trở lên Python đã hỗ trợ toán tử @:
Để hiểu rõ hơn, chúng ta cùng đi đến Ví dụ: import numpy as np _a = [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ] a = np.array(_a) #Create a 3 * 2 matrix _b = [ 1, 2 ] b = np.array(_b) #Create a 2-dimension vector print(a) print(b) print(‘a * b:’, a.dot(b)) #print out a * b using narray.dot() print(‘a * b:’, a @ b) #print out a * b using @ operationThực hiện từng bước: Đầu tiên xoay ngang b: Kết quả phép nhân là tổng từng dòng Nhân ma trận với ma trậnChúng ta nhân 2 ma trận bằng cách tách 1 ma trận ra thành nhiều vector rồi nhân, sau đó ghép các kết quả lại. Để nhân 2 ma trận, số cột của ma trận 1 phải bằng số hàng ở ma trận 2. Một ma trận m * n nhân với một ma trận n * o sẽ cho kết quả là một ma trận m * o Phân tíchĐầu tiên tách ma trân thứ 2 thành 2 vector nhỏ: thành và Nhân ma trận đầu lần lượt với 2 vector và : ; ; Kết quả là 2 vector có cùng kích thước: và Cuối cùng, ghép 2 vector lại với nhau: Phép nhân ma trận – ma trận với NumPyCũng như nhân ma trận với vector, trong NumPy ta có thể dùng:
Hoặc
Ví dụ: import numpy as np _a = [ [ 1, 2 ], [ 3, 4 ], [ 5, 6 ] ] a = np.array(_a) #Create a 3 * 2 matrix _b = [ [1, 3], [2, 1] ] b = np.array(_b) #Create a 2 * 2 matrix print(a) print(b) print(‘a * b:’, a.dot(b)) #print out a * b using narray.dot() print(‘a * b:’, a @ b) #print out a * b using @ operationThực hiện từng bước: Đầu tiên tách ma trân thứ 2 thành 2 vector nhỏ: thành và Nhân ma trận đầu lần lượt với 2 vector và : Kết quả là 2 vector có cùng kích thước: và Cuối cùng, ghép 2 vector lại với nhau: Tính chất của phép nhân ma trậnPhép nhân ma trận không có tính chất giao hoán. Phép nhân ma trận có tính chất kết hợp. Identity matrix (ma trận đơn vị)Identity matrix là ma trận mà khi nhân với bất kì ma trận khác cùng kích thước, ma trận đó sẽ không đổi. Phép nhân với identity matrix có tính chất giao hoán. Chúng ta có thể xem identity matrix là “số 1” của ma trận. Cấu trúc của identity matrix là 1 ma trận có số 1 trên đường chéo. Ví dụ: Ta có thể tạo một identity matrix trong NumPy bằng hàm eye:
Với x là kích thước của identity matrix. Ví dụ: import numpy as np a = np.eye(5) print(a)Phép nhân “element-wise” với ma trậnĐối với phép nhân element-wise, kết quả sẽ là một ma trận với những phần tử là tích của các phần tử là tích của 2 phần tử tương ứng trong 2 ma trận. Với NumPy, ta có thể thực hiện phép nhân element-wise bằng toán tử * Ví dụ: import numpy as np _a = [ [ 1, 2, 3 ], [ 4, 5, 6 ] ] _b = [ [ 2, 3, 5], [7, 9, 21] ] a = np.array(_a) #create 2 * 3 matrix: a b = np.array(_b) #create 2 * 3 matrix: b print(‘a .* b:’, a * b) #print out a .* bToán tử logic với ma trậnTa hoàn toàn có thể thực hiện các toán tử logic với ma trận. Kết quả trả ra sẽ được ghi vào một ma trận với kích thước tương đương. Ví dụ: import numpy as np a = np.eye(5) print(a == 1)Inverse matrix (ma trận khả nghịch)Inverse matrix được kí hiệu bằng: A-1 Tích của ma trận với ma trận đảo của nó sẽ là một Identity matrix. Tương tự như trong số tự nhiên: 2 * 2-1 = 1 Với NumPy function dùng để invert matrix là:
Ví dụ: import numpy as np _a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] a = np.array(_a) a_i = np.linalg.pinv(a) #Create inverse of a print(a_i) print(a @ a_i)
Transpose matrix (ma trận chuyển vị)Transpose matrix được kí hiệu là: AT Transpose matrix là ma trận đảo hàng và cột so với ma trận gốc. Với NumPy ta sử dụng function np.transpose() để transpose matrix. Ví dụ: import numpy as np _a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] a = np.array(_a) a_t = np.transpose(a) #Create transpose of a print(a) print(a_t)Hàm size với ma trậnChúng ta có thể sử dụng hàm size để lấy kích thước của ma trận:
Trong đó:
Ví dụ: import numpy as np _a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] a = np.array(_a) print(np.size(a)) print(np.size(a, 1))Hàm sum và max/min với ma trậnChúng ta có thể sử dụng hàm sum để lấy tổng các phần tử, max để lấy phần tử lớn nhất, min để lấy phần tử nhỏ nhất. Cấu trúc:
Trong đó
Ví dụ: import numpy as np _a = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] a = np.array(_a) print(np.sum(a, 0)) print(np.max(a)) print(np.min(a, 1))Ý nghĩa của ma trận trong Machine LearningĐối với Machine Learning, chúng ta phải xử lí những dữ liệu với số lượng rất lớn, ta không thể cứ dùng vòng lặp duyệt qua từng dữ liệu được vì sẽ thiếu tối ưu về tốc độ. Vì thế chúng ta cần một công cụ mạnh hơn để xử lí những dữ liệu số lượng lớn, đó là ma trận. Với các phép tính với ma trận, chỉ cần 1 dòng lệnh ta đã có thể cùng lúc thực hiện phép tính trên nhiều dữ liệu. Kết luậnBài viết này đã hướng dẫn cho các bạn về ma trận và vector với NumPy. Ở bài sau, Kteam sẽ giới thiệu về THUẬT TOÁN LINEAR REGRESSION VÀ HÀM HYPOTHESIS Cảm ơn bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”. Thảo luậnNếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng. |