Thứ Bảy, 18 tháng 5, 2024

31. Mảng trong Python phần 5

Chúng ta đã nói qua rằng trong Python, chúng ta có các danh sách (LIST) phục vụ mục đích của mảng, nhưng chúng xử lý chậm.

  • NumPy nhằm mục đích cung cấp một đối tượng mảng nhanh hơn theo "lời đồn" là tới 50 lần so với danh sách (List) Python truyền thống.
  • Đối tượng mảng trong NumPy có tên là ndarray, nó cung cấp rất nhiều hàm hỗ trợ giúp làm việc với ndarray rất dễ dàng.
  • Mảng được sử dụng rất thường xuyên trong khoa học dữ liệu, nơi tốc độ và tài nguyên rất quan trọng.

Chúng ta sẽ tiếp tục với NumPy trong phần này. Cũng như C, mảng trong Python cũng có khái niệm 1 chiều, 2 chiều...

 

Mảng 1 chiều

Vẫn trung thành với IDE Online, chúng ta ví dụ mảng 1 chiều.

 

import numpy as np

arr = np.array(("Tao", "Chuoi", "Xoai", "Nho"))
print(arr)

 

Chạy chương trình 

 


 

Mảng arr trong ví dụ trên là hình ảnh mảng 1 chiều "mẫu mực" trong Python. 

arr cũng là một đối tượng (Object) mảng ndarrray.

Chúng ta có thể thay dấu ngoặc đơn () bên trong thành dấu ngoặc vuông[], kết quả sẽ không đổi, nhưng bản chất là khác nhau. 

 

import numpy as np

arr = np.array(["Tao", "Chuoi", "Xoai", "Nho"])
print(arr)

 

Kết quả


 

Để tạo một ndarray, chúng ta có thể chuyển một List, Tuple hoặc bất kỳ đối tượng giống mảng nào vào phương thức array() và nó sẽ được chuyển đổi thành một ndarray. Ví dụ trước chúng ta dùng List, ví dụ sau chúng ta sử dụng Tuple.

 

Mảng 2 chiều

Trước hết chúng ta "trộn" một cách...tào lao các mảng trong những phần trước như sau:

 

import numpy as np

arr = np.array([["Tao", "Chuoi", "Xoai", "Nho"], ["Toyota", "Honda", "BMW"]])
print(arr)

 

Chạy chương trình, ta nhận được báo lỗi. 


 

Đại ý là việc tạo một ndarray từ các chuỗi lồng nhau rời rạc (là một danh sách hoặc bộ gồm các danh sách hoặc bộ dữ liệu hoặc ndarray có độ dài hoặc hình dạng khác nhau) không được dùng nữa. 

Ví dụ chúng ta có thể cho chương trình "chạy được" bằng cách thêm một phần tử vào mảng xe


import numpy as np

arr = np.array([["Tao", "Chuoi", "Xoai", "Nho"], ["Toyota", "Honda", "BMW", "Ford"]])
print(arr)


Chạy chương trình, mọi thứ ổn.



Nhưng nếu chúng ta không muốn thêm "Ford" thì sao? Chúng ta cần qui định dtype=object.


import numpy as np

arr = np.array([["Tao", "Chuoi", "Xoai", "Nho"], ["Toyota", "Honda", "BMW"]], dtype=object)
print(arr)


Chạy chương trình, bây giờ đã không còn lỗi.


 

Một ndarray là một thùng chứa đa chiều (thường có kích thước cố định) chứa các thành phần cùng loại và kích thước. Vì vậy những ứng dụng mảng đa chiều chúng ta nên có cùng kích thước, ví dụ trên chúng ta có thể không cần qui định dtype=object bằng cách thêm phần tử rỗng, ví dụ

 

import numpy as np

arr = np.array([["Tao", "Chuoi", "Xoai", "Nho"], ["Toyota", "Honda", "BMW", ""]])
print(arr)

 

Chạy chương trình



Có một lưu ý ở đây. Thật ra mọi thứ không phức tạp như vậy, nó y như khái niệm hàng cột mà chúng ta đã thảo luận trong C. Chúng tôi làm cho mọi thứ trở nên "lộn xộn" như vậy vì muốn bạn có một thói quen luôn tìm kiếm giải pháp cho mọi tình huống.

Quay lại một chút với cái mảng 2 chiều "chuẩn không cần chỉnh" của chúng ta:

import numpy as np

arr = np.array([["Tao", "Chuoi", "Xoai", "Nho"], ["Toyota", "Honda", "BMW", "Ford"]])
print(arr)

 

Bạn có thấy hai dấu ngoặc vuông liền nhau [[]] ? Khi nào chúng ta thấy 2 dấu ngoặc vuông liền nhau thì ta gọi là mảng 2 chiều, nếu thấy 3 dấu ngoặc vuông liền nhau [[[]]]  thì đó là mảng 3 chiều, nếu thấy 4 dấu ngoặc vuông liền nhau [[[[]]]] thì đó là mảng 4 chiều....

 

Kiểm tra kích thước mảng

NumPy Arrays cung cấp thuộc tính (attribute ) ndim trả về một số nguyên cho chúng ta biết mảng đó có bao nhiêu chiều. Chúng ta sẽ thử với mảng các số cho dễ nhìn hơn.

import numpy as np

a = np.array(24)
b = np.array([1, 2, 3, 4, 5])
c = np.array([[1, 2, 3], [4, 5, 6]])
d = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
e = np.array([[[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]], [[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]]])


print(a.ndim)
print(b.ndim)
print(c.ndim)
print(d.ndim)
print(e.ndim)

Chạy chương trình



 

Phần tiếp theo


Phần trước

Không có nhận xét nào:

Đăng nhận xét