NumPy (Numerical Python) เป็นไลบรารีพื้นฐานสำหรับ Scientific Computing มี ndarray (N-dimensional Array) ที่เร็วและประหยัดหน่วยความจำ
ฟังก์ชัน numpy.sort() คืนค่า **Sorted Copy** ของ Array (ไม่แก้ไข Array ต้นฉบับ) ส่วน ndarray.sort() ทำ In-place Sort
ไวยากรณ์
numpy.sort(a, axis=-1, kind=None, order=None)
| พารามิเตอร์ | คำอธิบาย |
|---|---|
| a | Array ที่ต้องการเรียง |
| axis | แกนที่เรียง (-1 = last axis, 0 = row-wise สำหรับ 2D) |
| kind | Algorithm: 'quicksort' (default), 'mergesort', 'heapsort', 'stable' |
| order | Field เรียง (สำหรับ Structured Array) |
ตัวอย่างโค้ด
import numpy as np
# 1. Basic 2D Array Sort
my_arr = np.array([[3, 56], [19, 100]])
print("Original array:")
print(my_arr)
print("\nnp.sort(my_arr) - sort each row:")
print(np.sort(my_arr))
print("\nnp.sort(my_arr, axis=0) - sort each column:")
print(np.sort(my_arr, axis=0))
# 2. Structured Array - Sort by Field
dt = np.dtype([('Name', 'U10'), ('Age', int)])
my_arr = np.array([("Will", 20), ("Jack", 19), ("Bob", 23)], dtype=dt)
print("\nOriginal structured array:")
print(my_arr)
print("\nSorted by Name:")
print(np.sort(my_arr, order='Name'))
print("\nSorted by Age:")
print(np.sort(my_arr, order='Age'))
ผลลัพธ์
Original array:
[[ 3 56]
[ 19 100]]
np.sort(my_arr) - sort each row:
[[ 3 56]
[ 19 100]]
np.sort(my_arr, axis=0) - sort each column:
[[ 3 56]
[ 19 100]]
Original structured array:
[('Will', 20) ('Jack', 19) ('Bob', 23)]
Sorted by Name:
[('Bob', 23) ('Jack', 19) ('Will', 20)]
Sorted by Age:
[('Jack', 19) ('Will', 20) ('Bob', 23)]
คำอธิบาย
2D Array:
axis=1(default) เรียงแต่ละ Row,axis=0เรียงแต่ละ ColumnStructured Array: ใช้
order='field_name'เรียงตาม Field ที่กำหนดตัวอย่างข้อมูลมีค่าที่เรียงแล้ว จึงไม่เห็นการเปลี่ยนแปลง
Sorting Algorithms Comparison
| Kind | Speed | Stable | Memory | Worst Case |
|---|---|---|---|---|
| quicksort | Fast | No | Low | O(n²) |
| mergesort | Medium | Yes | High | O(n log n) |
| heapsort | Medium | No | Low | O(n log n) |
| stable | Fast | Yes | Medium | O(n log n) |
Stable Sort: รักษาลำดับเดิมของค่าที่เท่ากัน สำคัญเมื่อเรียงหลาย Key
In-place Sort vs Copy
arr = np.array([3, 1, 2])
# Copy sort (Original unchanged)
sorted_arr = np.sort(arr)
print(arr) # [3 1 2]
print(sorted_arr) # [1 2 3]
# In-place sort (Original changed)
arr.sort()
print(arr) # [1 2 3]
Argsort - ได้ Index แทนค่า
arr = np.array([30, 10, 20])
indices = np.argsort(arr) # [1, 2, 0]
print(arr[indices]) # [10, 20, 30]