Danh sách (list) là kiểu dữ liệu chứa dãy thứ tự các phần tử. Danh sách là kiểu dữ liệu hữu ích vì cho phép bạn lưu trữ nhiều giá trị liên quan trong một biến. Với danh sách, bạn có thể lưu tên 10 đôi giày trong một biến; bạn có thể lưu danh sách mua sắm tại cửa hàng trong một biến.
Mặc dù kiểu dữ liệu danh sách tích hợp sẵn đã mạnh mẽ, cho các trường hợp sử dụng nâng cao hơn bạn có thể thấy nó thiếu hụt. Đó là lúc kiểu dữ liệu mảng (array) của NumPy xuất hiện. Thư viện NumPy có thể dùng để tạo mảng nhiều chiều dễ dàng.
Trong hướng dẫn này, chúng ta sẽ nói về mảng NumPy là gì, tại sao chúng hữu ích, và cách bạn có thể làm việc với chúng trong mã. Hãy bắt đầu!
Mảng NumPy Là Gì?
Mảng NumPy là đối tượng mảng dùng trong thư viện NumPy Python. NumPy, viết tắt của Numerical Python, là gói thường dùng cho tính toán khoa học và toán học. Nó đi kèm với nhiều công cụ hỗ trợ phân tích dữ liệu và toán học nâng cao.
Trong Python thuần túy (Python không có gói bên ngoài), mảng mạnh mẽ nhưng có thể chậm khi xử lý. Mảng NumPy, mặt khác, nhằm nhanh hơn rạng rạng cấp so với mảng Python truyền thống.
Sự tăng hiệu suất này đạt được vì mảng NumPy lưu giá trị ở một vị trí liên tục trong bộ nhớ. Điều này giúp Python dễ dàng truy cập và thao tác danh sách.
Cách Khai Báo Mảng NumPy
Để bắt đầu, hãy thiết lập mảng NumPy. Cho hướng dẫn này, chúng ta sẽ lưu giá trị chuỗi trong mảng. Các giá trị chuỗi này là danh sách món ngọt tại quán cà phê địa phương. Chúng ta bắt đầu bằng cách nhập thư viện NumPy:
import numpy as np
Dòng mã này nhập numpy từ Python và gán tên np cho thư viện. Điều này có nghĩa là bất cứ khi nào chúng ta cần làm việc với mảng, chúng ta chỉ cần gọi np.
Tiếp theo, chúng ta sẽ khai báo mảng dùng giao diện mảng:
treats = np.array(["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"]) print(treats)
Mảng của chúng ta chứa ba giá trị chuỗi. Giống mảng Python truyền thống, chúng ta đặt tất cả mục trong danh sách trong ngoặc vuông. Để khai báo mảng NumPy, chúng ta dùng phương thức array là một phần của np. Điều này tạo đối tượng ndarray, là kiểu mảng tích hợp của NumPy.
Mã của chúng ta trả về bản sao mảng gốc, được lưu dưới dạng mảng NumPy:
['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread']
Đó là xong: chúng ta giờ có mảng có thể làm việc.
Mảng NumPy: Các Chiều
Khi nói về chiều trong NumPy, chúng ta không nói về thế giới mới như trong phim. Chiều trong mảng là một cấp độ độ sâu trong mảng đó. Khi thuật ngữ chiều được dùng, nó tham chiếu đến mảng lồng nhau. Đây là mảng chứa mảng.
Một mảng có thể có bất kỳ số chiều nào. Hầu hết mảng bạn làm việc sẽ là mảng 1-D, 2-D, hoặc 3-D. "D" là viết tắt của dimension (chiều).
Mảng NumPy 1-D
Trong ví dụ đầu tiên, chúng ta tạo mảng 1-D. Đây là mảng chứa mảng 0-D (hoặc mục) làm phần tử. Hầu hết mảng bạn làm việc sẽ là 1-D.
Hãy tạo mảng lưu giá món ngọt tại quán cà phê:
import numpy as np prices = np.array([1.95, 2.00, 2.05]) print(prices)
Mã của chúng ta trả về mảng một chiều, lưu giá trị: [1.95 2. 2.05].
Để truy cập phần tử từ mảng 1-D, bạn có thể dùng cú pháp giống như với danh sách Python. Hãy lấy mục thứ hai trong danh sách:
print(prices[1])
Mã của chúng ta trả về mục có giá trị chỉ mục 1, là: 2.
Để tìm hiểu thêm về mảng Python, đọc hướng dẫn người mới về mảng Python của chúng tôi.
Mảng NumPy 2-D
Không phải mảng nào cũng là 1-D. Giả sử chúng ta muốn lưu mảng chứa hai mảng. Một mảng lưu món ngọt bán tại quán cà phê; mảng kia lưu danh sách cà phê bán tại quán. Cùng nhau, chúng là một phần của mảng menu items.
Hãy tạo mảng này dùng NumPy:
import numpy as np
menu_items = np.array([
["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
["Cappuccino", "Espresso", "Mocha"]
])
print(menu_items)
Mảng kết quả là:
[['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread'] ['Cappuccino' 'Espresso' 'Mocha']]
Mảng mới tạo có hai chiều. Mảng đầu tiên trong mảng của chúng ta chứa danh sách món ngọt; mảng thứ hai chứa danh sách cà phê. Lưu ý cả hai mảng này được đặt trong cặp ngoặc vuông kết nối hai mảng.
Truy xuất mục từ mảng 2-D hoạt động hơi khác trong NumPy so với Python. Để truy cập phần tử từ mảng 2-D, bạn cần tách số chỉ mục của giá trị bạn muốn lấy từ mảng.
Xem mã này:
print(menu_items[0, 2])
Mã của chúng ta trả về: Jammy Shortbread. Chúng ta lấy mục có giá trị chỉ mục 2 lưu bên trong mảng có giá trị chỉ mục 0. Trong trường hợp này, chúng ta lấy mục cuối cùng trong mảng lưu món ngọt bán tại quán cà phê.
Mảng NumPy 3-D
Hãy thêm chiều khác! Mảng NumPy có thể chứa mảng 3-D. Đây là mảng chứa mảng 2-D.
Giả sử chúng ta muốn lưu các giá trị sau:
- Món ăn ngọt và không ngọt (được ghép cặp, nhưng trong mảng riêng); và
- Đồ uống có caffeine và không caffeine (được ghép cặp, trong mảng riêng);
Tất cả giá trị này nên được lưu trong một mảng. Các chiều của mảng này là:
- 1-D: Tất cả món thực đơn
- 2-D: Món ngọt và không ngọt, đồ uống có caffeine và không caffeine
- 3-D: Món ngọt, món không ngọt, đồ uống có caffeine, không caffeine
Hãy tạo mảng này dùng NumPy. Dán mã sau vào file Python:
import numpy as np
menu_items = np.array([
[
["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
["Smoked Bacon Roll", "Tuna Melt Panini", "Cheese and Tomato Toastie"]
],
[
["Cappuccino", "Espresso", "Mocha"],
["Apple Juice", "Water", "Orange Juice"]
]
])
print(menu_items)
Mã của chúng ta trả về:
[[['Blueberry Muffin' 'Cinnamon Bun' 'Jammy Shortbread'] ['Smoked Bacon Roll' 'Tuna Melt Panini' 'Cheese and Tomato Toastie']] [['Cappuccino' 'Espresso' 'Mocha'] ['Apple Juice' 'Water' 'Orange Juice']]]
Chúng ta đã tạo mảng 3-D với tất cả thông tin thảo luận trước. Mảng này là danh sách toàn diện tất cả món thực đơn quán cà phê cung cấp.
Truy cập mục từ mảng 3-D hoạt động tương tự cú pháp dùng để truy cập mục từ mảng 2-D. Khác biệt là bạn phải chỉ định số chỉ mục thứ ba để lấy mục từ mảng 3-D. Hãy lấy "Mocha" từ mảng:
print(menu_items[1, 0, 2])
Mã của chúng ta trả về: Mocha.
1 là số chỉ mục chiều thứ nhất chúng ta muốn truy cập (1 tương ứng với đồ uống); 0 là số chỉ mục chiều thứ hai (0 tương ứng với đồ uống có caffeine); 2 là số chỉ mục chiều thứ ba (2 tương ứng với Mocha).
Đếm Số Chiều Trong Mảng
Mảng NumPy có thể trông khá phức tạp khi bạn bắt đầu thêm chiều mới. Chúng ta chưa khám phá mảng có hơn ba chiều! May mắn cho bạn, có tiện ích ngắn gọn để tính mảng có bao nhiêu chiều.
Dán mã sau vào file Python:
import numpy as np
menu_items = np.array([
["Blueberry Muffin", "Cinnamon Bun", "Jammy Shortbread"],
["Cappuccino", "Espresso", "Mocha"]
])
print(menu_items.ndim)
Chạy mã. Giá trị "2" được trả về. Điều này cho biết mảng của chúng ta chứa hai chiều, chúng ta thấy là đúng bằng cách phân tích mảng trên.
Kết Luận
Mảng NumPy là cách linh hoạt lưu trữ các giá trị tương tự. Chúng nhanh và hiệu quả hơn mảng Python truyền thống. Bạn có thể làm việc với nhiều chiều dùng mảng NumPy dễ dàng; điều này khó hơn trong Python thuần túy.
Bây giờ bạn đã sẵn sàng bắt đầu dùng mảng NumPy như một lập trình viên chuyên nghiệp!