NumPy là viết tắt của 'Numerical Python'. Là thư viện chứa đối tượng mảng đa chiều và nhiều phương thức giúp xử lý mảng. NumPy thực hiện nhiều phép toán trên mảng. Dùng cùng các gói như SciPy, Matplotlib. NumPy+Matplotlib hiểu như替代 MatLab. Là gói mã nguồn mở, ai cũng dùng được.
Đối tượng quan trọng nhất trong NumPy là mảng n chiều gọi là 'ndarray'. Nó định nghĩa tập hợp các mục cùng kiểu. Giá trị trong ndarray truy cập bằng chỉ mục (0-based). Mỗi mục trong ndarray chiếm cùng kích thước khối trong bộ nhớ. Kiểu mỗi phần tử trong ndarray tìm được bằng hàm 'dtype'.
Một mục từ ndarray trích xuất được bằng cắt mảng (array slicing). Được biểu diễn như đối tượng kiểu array scalar. Nhiều hàm sắp xếp có trong NumPy. Chúng triển khai bằng phương pháp khác nhau, mỗi hàm khác nhau về tốc độ thực hiện, hiệu suất trường hợp xấu, bộ nhớ yêu cầu, v.v.
Hàm sort trong NumPy trả về bản sao đã sắp xếp của mảng truyền vào.
numpy.sort(arr, axis, kind, order)
Ở đây, 'arr' là mảng cần sắp xếp. 'axis' là trục dọc theo đó mảng được sắp xếp. 'kind' là loại sắp xếp, mặc định là quicksort. Nếu mảng chứa các trường khác, 'order' là các trường cần sắp xếp.
Ví dụ áp dụng sort() trên mảng NumPy:
Ví dụ
import numpy as np
my_arr = np.array([[3, 56], [19, 100]])
print("Mảng gốc:")
print(my_arr)
print("Gọi hàm sort():")
print(np.sort(my_arr))
print("Sắp xếp mảng dọc theo trục 0:")
print(np.sort(my_arr, axis=0))
# Mảng có cấu trúc (structured array)
dt = np.dtype([('Name', 'S6'), ('Age', int)])
my_arr = np.array([("Will", 20), ("Jack", 19), ("Bob", 23)], dtype=dt)
print("Mảng gốc:")
print(my_arr)
print("Mảng sắp xếp theo tên:")
print(np.sort(my_arr, order='Name'))
Đầu ra
Mảng gốc: [[ 3 56] [19 100]] Gọi hàm sort(): [[ 3 56] [19 100]] Sắp xếp mảng dọc theo trục 0: [[ 3 56] [19 100]] Mảng gốc: [(b'Will', 20) (b'Jack', 19) (b'Bob', 23)] Mảng sắp xếp theo tên: [(b'Bob', 23) (b'Jack', 19) (b'Will', 20)]
Giải thích
- Nhập thư viện cần thiết vào môi trường.
- Tạo ndarray, sắp xếp bằng hàm
sort. - Hiển thị đầu ra.
- Lại sắp xếp dọc theo trục 0 và hiển thị.
- Tạo mảng khác gồm tên và tuổi, sắp xếp dọc theo trục 0.
- Hiển thị đầu ra.
Các thuật toán sắp xếp (kind):
quicksort- Mặc định, nhanh, không ổn định (unstable)mergesort- Ổn định (stable), O(n log n)heapsort- Không ổn định, O(n log n), ít bộ nhớstable- Tự động chọn mergesort hoặc timsort (NumPy 1.17+)
Lưu ý: np.sort trả về bản sao, mảng gốc không thay đổi. Dùng arr.sort() để sắp xếp tại chỗ (in-place).