Mảng hai chiều¶
Tóm lược nội dung
Bài này trình bày về mảng hai chiều.
Đặt vấn đề¶
Làm thế nào xử lý khi dữ liệu không còn là dãy số, mà là một bảng số liệu? Chẳng hạn như:
- Bảng điểm của lớp với nhiều cột điểm.
- Ma trận toán học.
- Hình ảnh, vốn là tập hợp các pixel.
Khi đó, mảng một chiều không còn đủ mạnh nữa. Ta cần một cấu trúc mới có thể biểu diễn dữ liệu theo dạng hàng và cột, đó là mảng hai chiều.
Khái niệm¶
Mảng hai chiều là cấu trúc dữ liệu dùng để lưu trữ các phần tử theo dạng bảng, gồm hàng và cột.
Trong đó, mỗi phần tử được định vị bằng hai chỉ số:
- Chỉ số hàng
- Chỉ số cột
Số phần tử của mỗi hàng ứng với số cột của mảng. Đồng thời, các hàng đều có số phần tử bằng nhau.
Hình sau minh hoạ mảng hai chiều A.
Nói cách khác, mảng hai chiều có thể được xem là mảng của các mảng. Nghĩa là, mỗi phần tử của mảng hai chiều là một mảng-một-chiều.
Hình ảnh mảng hai chiều trong thực tế:
- Bàn cờ vua
- Bảng số Sudoku
- Bảng tính Excel
Mảng hai chiều có thể áp dụng khi xử lý:
- Bảng
- Lưới
- Ma trận
Mảng hai chiều trong Python¶
Tương tự bài trước, ta sẽ sử dụng thư viện mã nguồn mở numpy để biểu diễn mảng hai chiều.
Cài đặt thư viện numpy¶
Xem lại cách cài đặt thư viện numpy tại đây.
Nạp thư viện¶
Sau khi cài đặt, ta nạp thư viện numpy bằng lệnh import. Đồng thời, quy ước tên gọi tắt của numpy là np.
Khởi tạo¶
Để khởi tạo mảng hai chiều, ta sử dụng hàm array() của numpy.
Các phần tử được liệt kê trong các cặp ngoặc vuông lồng nhau: [[ ], [ ], ..., [ ]]
Ví dụ:
Dòng lệnh 5 khởi tạo mảng hai chiều A bằng cách liệt kê phần tử.
\nlà ký tự xuống dòng.
Chạy đoạn mã trên, kết quả như sau:
Để khởi tạo mảng hai chiều gồm các phần tử có cùng giá trị, ta dùng hàm full() của numpy.
Ví dụ:
Dòng lệnh 13 khởi tạo mảng zeros gồm 3 hàng, 4 cột, các phần tử đều có giá trị 0.
Chạy đoạn mã trên, kết quả như sau:
Truy xuất phần tử¶
Mỗi phần tử được truy xuất thông qua chỉ số hàng và chỉ số cột, đặt trong hai cặp ngoặc vuông [][], với hàng trước và cột sau.
Ví dụ:
Dòng lệnh 11 và 14 in ra:
- Phần tử đầu tiên
- Phần tử nằm ở hàng 2, cột 3 của mảng
A, cũng chính là phần tử cuối cùng.
Chạy đoạn mã trên, kết quả như sau:
Duyệt mảng¶
Nếu xem mảng A là mảng một chiều thì mỗi phần tử của A là một hàng. Để lấy số hàng của A, ta viết len(A).
Mỗi hàng của mảng hai chiều A cũng là một mảng-một-chiều. Do đó, để lấy số cột của mảng A, tức là số phần tử trong mỗi hàng, ta dùng hàm len() cho một hàng bất kỳ, chẳng hạn: len(A[0]) là độ dài của hàng đầu tiên.
Ví dụ:
Dòng lệnh 8 và 12 lấy số hàng và số cột của mảng A rồi gán cho biến row và biến col.
Chạy đoạn mã trên, kết quả như sau:
Khi duyệt mảng hai chiều, ta thường dùng hai vòng lặp lồng nhau:
- Vòng lặp ngoài dùng để duyệt từng hàng.
- Vòng lặp trong dùng để duyệt từng cột, tức từng phần tử của hàng đang duyệt.
Ví dụ:
Dòng lệnh từ 16 đến 23 dùng hai vòng lặp for lồng nhau để in ra mảng A theo dạng bảng.
- In thêm khoảng trắng ngay sau mỗi phần tử.
Chạy đoạn mã trên, kết quả như sau:
Mã nguồn¶
Code đầy đủ được đặt tại:
Sơ đồ tóm tắt¶
Some English words¶
| Vietnamese | Tiếng Anh |
|---|---|
| cột | column |
| hàng | row |
| mảng của mảng | array of arrays |
| mảng hai chiều | two-dimensional array |