Tất cả những bài tập trong nội dung bài viết này hoàn toàn có thể được triển khai trực tiếp trên trình duyệt qua website FundaML
2.1. Khởi tạo một ma trận 2.2. Ma trận đơn vị và ma trận đường chéo cánh 2.4. Truy vấn vào từng thành phần của ma trận 2.4.1. Truy vấn vào từng thành phần 2.5. Truy vấn vào nhiều thành phần của ma trận 2.6. np.sum, np.min, np.max, np.mean cho mảng nhiều chiều 2.7. Những phép toán tác động đến mọi thành phần của ma trận 2.9. Chuyện vị ma trận, Reshape ma trận 2.11. Tích giữa hai ma trận, tích giữa ma trận và vector
2.0. Mảng nhiều chiều
Trong Numpy, người ta thường dùng mảng numpy hai chiều để trổ tài một ma trận. Mảng hai chiều hoàn toàn có thể xem như là một mảng của những mảng một chiều. Trong số đó, mỗi mảng nhỏ một chiều tương ứng với một hàng của ma trận.
Fan đang xem: Zero mean là gì
Nói cách khác, ma trận hoàn toàn có thể được xem như là mảng của những vector hàng – mỗi vector hàng được trình diễn bằng một mảng numpy một chiều.
Ví dụ, nếu một mảng numpy hai chiều a mô tả ma trận:(leftandlt;begin{matrix} 1 & 2 3 & 4 end{matrix} rightandgt;), khi được in ra nó sẽ được dạng:
array(<<1, 2andgt;, <3, 4andgt;>)Ở đây mọi người hoàn toàn có thể nhìn thấy ba mảng, mỗi mảng được trổ tài bằng một cặp đóng mở ngoặc vuông <>:
hai mảng <1, 2andgt; và <3, 4andgt; trổ tài những hàng của ma trận. Chúng là những mảng một chiều.
mảng <<1, 2andgt;, <3, 4andgt;> có hai phân tử, mỗi thành phần là một hàng của ma trận.
Theo quy ước của Numpy, mọi người cần đi từ mảng ngoài cùng tới những mảng trong:
mảng lớn số 1 là <<1, 2andgt;, <3, 4andgt;> được xem như là mảng ứng với axis = 0. Trong mảng này, thành phần thứ nhất là <1, 2andgt;, thành phần thứ hai là <3, 4andgt;.
hai mảng lớn thứ hai là <1, 2andgt; và <3, 4andgt; được xem như là những mảng ứng với axis = 1.
Xem xét:
Một mảng numpy trọn vẹn hoàn toàn có thể có nhiều hơn nữa hai chiều. Lúc này ta vẫn đi từ cặp ngoặc vuông ngoài cùng vào tới trong cùng, axis cũng đi từ 0, 1, … theo trật tự đó.
Mỗi mảng con phải có số thành phần đều nhau, trổ tài cho việc mỗi hàng của ma trận phải có số chiều như nhau, không hề có hàng nào thò ra thụt vào.
Khi thao tác làm việc với những thư viện cho Machine Learning, mỗi điểm tài liệu thường được xem như là một mảng một chiều. Tập hợp những điểm tài liệu thường được lưu trong một ma trận – tức mảng của những mảng một chiều. Trong ma trận này, mỗi hàng tương ứng với một điểm tài liệu.
Việc này hơi ngược với cách xây dựng toán học của những thuật toán, nơi mà mỗi điểm tài liệu thường được xem như là một vector cột – tức mỗi cột của ma trận là một điểm tài liệu. Khi đọc những tài liệu và thao tác làm việc với những thư viện, người đọc cần lưu ý.
Tựa như bài “Cơ phiên bản về vector”, trong bài học kinh nghiệm này, mọi người sẽ cùng làm quen với những cách xử lý ma trận trong Numpy: Khởi tạo, truy vấn, thay đổi, ma trận đặc trưng, …
2.1. Khởi tạo một ma trận
2.1.1. Khởi tạo một ma trận
Cách giản dị nhất để khởi tạo một ma trận là nhập vào từng thành phần của ma trận đó. Cách làm này, tất nhiên, chỉ phù phù hợp với những ma trận nhỏ.
Nếu người mới chuyển từ Matlab qua Python, các bạn sẽ thấy cách khai báo của Matlab dễ chịu và thoải mái hơn rất nhiều. Mọi người sẽ phải quen dần thôi :).
Khi khai báo một mảng numpy nói chung, nếu ít nhất một thành phần của mảng là float, type của mọi thành phần trong mảng sẽ tiến hành xem như là “numpy.float64” (số thực 64 bit).
Trái lại, nếu toàn bộ những thành phần là số nguyên (không hề có dấu . xuất hiện),type của mọi thành phần trong mảng sẽ tiến hành xem như là “numpy.int64” (số nguyên 64 bit).
Xem thêm: Cấu Trúc Và Cách Dùng I Don’T Mind Trong Tiếng Anh, Một Số Mẫu Câu Tiếng Anh Dùng
Nếu muốn chỉ định type của những thành phần trong mảng, ta cần đặt giá trị cho dtype. Ví dụ:
Bài tập:
Khai báo một mảng numpy hai chiều A mô tả ma trận:
<mathbf{A} = leftandlt;begin{matrix}1 & 2 & 3 4 & 5 & 6 7 & 8 & 9end{matrix}rightandgt;>
2.2. Ma trận đơn vị và ma trận đường chéo cánh
2.2.1. Ma trận đơn vị
Để tạo một ma trận đơn vị có số chiều bằng n (ma trận đơn vị là một ma trận vuông có tất cả những thành phần trên tuyến đường chéo cánh bằng 1), mọi người tận dụng hàm np.eye():
Hàm np.eye() cũng rất được dùng để làm tạo những ma trận toàn 1 ở một đường chéo cánh phụ nào đó, những thành phần để lại bằng 0. Ví dụ:k = 1 sẽ tương ứng với đường chéo cánh phụ ngay trên tuyến đường chéo cánh chíh. k = -2 sẽ tương ứng với đường chéo cánh phụ thứ hai dưới đường chéo cánh chính.
Fan đọc hoàn toàn có thể tìm hiểu thêm về kiểu cách tận dụng hàm ‘np.eye()’ tại đây.
Xin nói lại rằng người đọc luôn luôn hoàn toàn có thể xem cách tận dụng một hàm trên terminal bằng phương pháp gõ help(func) trong đó func là tên gọi hàm bạn thích tra cứu. Ví dụ, help(np.eye).
2.2.2. Ma trận đường chéo cánh
Để khai báo một ma trận đường chéo cánh, hoặc muốn trích xuất đường chéo cánh của một ma trận, ta dùng hàm np.diag.
Nếu nguồn vào là một mảng một chiều, trả về một mảng hai chiều trổ tài ma trận có đường chéo cánh là những thành phần thuộc mảng đó.
Nếu nguồn vào là một mảng hai chiều (hoàn toàn có thể không vuông), trả về mảng một chiều chứa những giá trị ở hàng thứ i, cột thứ i với 0 . Trong số đó m, n thứu tự là số hàng và số cột của ma trận được trình diễn bằng mảng hai chiều lúc đầu.
Đường chéo cánh phụ của một ma trận cũng hoàn toàn có thể được lấy bằng phương pháp tận dụng hàm này và chỉ ra giá trị của k:
Bài tập:
Với một số trong những tự nhiên n, hãy viết hàm trả về ma trận có dạng: <leftandlt;begin{matrix}0 & 0 & 0 & 0 & dots & 0 & 0 1 & 0 & 0 & 0 & dots & 0 & 0 0 & 2 & 0 & 0 & dots & 0 & 0 dots & dots & dots & dots & ddots & dots 0 & 0 & 0 & 0 & dots & 0 & 0 0 & 0 & 0 & 0 & dots & n & 0 end{matrix}rightandgt;>tức đường chéo cánh phụ ngay dưới đường chéo cánh chính nhận những giá trị từ là một đến (n). Những thành phần là kiểu số nguyên.
2.3. Kích thước của ma trận
Tựa như cách tìm kích thước của mảng một chiểu, để tìm kích thước của mảng hai chiều, ta cũng tận dụng tính chất shape:
Ở đây, thành phẩm trả về là một tuple. Số thành phần của tuple này đó là số chiều của mảng. Nếu coi mảng hai chiều như ma trận, số hàng và số cột của ma trận hoàn toàn có thể được tính bằng:Với mảng numpy nhiều chiều, ta cũng dùng tính chất shape để tìm kích thước của mỗi chiều.
2.4. Truy vấn vào từng thành phần của ma trận
2.4.1. Truy vấn vào từng thành phần
Có hai phương pháp để truy vấn vào mỗi thành phần của mảng hai chiều:
2.4.1.1. Cách 1: giống với list
Để truy vấn vào thành phần ở hàng thứ i, cột thứ j của ma trận (chỉ số chính thức từ 0), ta hoàn toàn có thể coi thành phần đó là thành phần thứ j của mảng i trong mảng hai chiều lúc đầu.
Ví dụ:
ở đây Aandlt;1andgt; chính lả mảng một chiều <4, 5, 6andgt;, trong mảng này, ta lấy thành phần có chỉ số là 2, thành phần đó có mức giá trị là 6. Vậy Aandlt;1andgt;<2andgt; = 6.2.4.1.2. Cách 2: tương tự như Matlab
Trong Matlab, để truy vấn vào thành phần ở hàng trước tiên, cột trước tiên của một ma trận A, ta tận dụng A(1, 1). Trong Numpy, có một chút ít thay đổi:
Chỉ số chính thức từ 0. Bộ chỉ số được đặt trong dấu ngoặc vuông <>.
Ví dụ
2.4.2. Truy vấn vào hàng/cột
Để truy vấn vào hàng có chỉ số i của một ma trận A, ta chỉ nhớ dùng A hoặc A hoặc A<:>:
Để truy vấn vào cột có chỉ số j, ta dùng Aandlt;:,jandgt;:Xem xét:
Trong Numpy, thành phẩm trả về của một cột hay hàng đều là một mảng một chiều, không phải là một vector cột như trong Matlab. Tuy nhiên, khi lấy một ma trận nhân với nó, nó vẫn được xem như là một vector cột. tin tức cụ thể sẽ được trong những bài sau.
Nếu tận dụng Aandlt;:><1andgt;, thành phẩm trả về là hàng có chỉ số 1 chứ không phải cột có chỉ số 1. Trong trường hợp này, Aandlt;:> vẫn được hiểu là cả ma trận A, vì vậy nên Aandlt;:><1andgt; tương đương với Aandlt;1andgt;.
Có sự không giống nhau căn phiên bản giữa A và Aandlt;:>, mọi người sẽ trở lại trong một bài nào đó ở sau.
Bài tập:
Cho một ma trận A, viết hàm myfunc tính tổng những thành phần trên những cột có chỉ số chẵn (0, 2, 4, …) của ma trận đó. Ví dụ: