Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

การใช้ฟังก์ชัน sort() บน NumPy Arrays ใน Python

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)
พารามิเตอร์คำอธิบาย
aArray ที่ต้องการเรียง
axisแกนที่เรียง (-1 = last axis, 0 = row-wise สำหรับ 2D)
kindAlgorithm: 'quicksort' (default), 'mergesort', 'heapsort', 'stable'
orderField เรียง (สำหรับ 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 เรียงแต่ละ Column

  • Structured Array: ใช้ order='field_name' เรียงตาม Field ที่กำหนด

  • ตัวอย่างข้อมูลมีค่าที่เรียงแล้ว จึงไม่เห็นการเปลี่ยนแปลง

Sorting Algorithms Comparison

KindSpeedStableMemoryWorst Case
quicksortFastNoLowO(n²)
mergesortMediumYesHighO(n log n)
heapsortMediumNoLowO(n log n)
stableFastYesMediumO(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]