Computer >> Máy Tính >  >> Lập trình >> Python

a.sort, sorted (a), np_argsort (a) và np.lexsort (b, a) trong Python


Sắp xếp các phần tử dữ liệu theo một thứ tự cụ thể là một thao tác thường xuyên cần thiết. Để sắp xếp các phần tử trong một mảng, python sử dụng các hàm có tên là sorted () và array.sort ().

đã sắp xếp (mảng)

Hàm này trả về một mảng đã sắp xếp mà không sửa đổi mảng ban đầu.

a = [9,5,3,1,12,6]
b = sorted([9,5,3,1,12,6])
print "Sorted Array :\n",
print (b)
print "Original Array :\n",
print (a)

Chạy đoạn mã trên cho chúng ta kết quả sau -

Sorted Array :
[1, 3, 5, 6, 9, 12]
Original Array :
[9, 5, 3, 1, 12, 6]

list.sort ()

Hàm sắp xếp trả về một mảng đã sắp xếp bằng cách thực hiện sửa đổi tại chỗ đối với mảng được cung cấp. Do đó, mảng ban đầu được sửa đổi như được hiển thị trong ví dụ bên dưới.

a = [9,5,3,1,12,6]
print "Original Array :\n",
print (a)
print "Sorted Array :\n",
a.sort()
print (a)

Chạy đoạn mã trên cho chúng ta kết quả sau -

Original Array :
[9, 5, 3, 1, 12, 6]
Sorted Array :
[1, 3, 5, 6, 9, 12]

Vì vậy, hàm sorted () chậm hơn sort () vì nó tạo ra một bản sao của mảng ban đầu và sau đó sửa đổi nó.

Các yêu cầu phân loại phức tạp hơn được thực hiện bằng cách sử dụng Numpy. Numpy là một thư viện python được sử dụng rộng rãi trong xử lý dữ liệu khoa học vì nó cung cấp rất nhiều tính năng nâng cao. Chúng ta sẽ thấy cả phương pháp sắp xếp python thuần túy và phương pháp sắp xếp Numpy trong các ví dụ dưới đây.

numpy.argsort

Hàm này trong numpy trả về các chỉ số của mảng đã sắp xếp thay vì các phần tử của mảng. Trong ví dụ dưới đây, chúng ta lấy mảng, in các phần tử của nó cùng với chỉ số cho mỗi phần tử. Sau đó, chúng tôi áp dụng hàm argsort để cung cấp cho chúng tôi các chỉ số của mảng được sắp xếp và kết quả cũng là một mảng.

import numpy as np
x = np.array([9,5,3,1,12,6])
print(x)

#Print the positions of elements
for i in range(len(x)):
print "[",i,"]",x[i],
print "\n"
# Print the indices of sorted elements
s = np.argsort(x)
print(s)

Chạy đoạn mã trên cho chúng ta kết quả sau -

[ 9 5 3 1 12 6]

[ 0 ] 9 [ 1 ] 5 [ 2 ] 3 [ 3 ] 1 [ 4 ] 12 [ 5 ] 6

[3 2 1 5 0 4]

numpy.lexsort

Hàm này được sử dụng để sắp xếp bằng cách sử dụng nhiều khóa sắp xếp liên quan đến nhiều hơn một mảng. Ví dụ:trước tiên, chúng ta sắp xếp dữ liệu trong Cột A và sau đó sắp xếp các giá trị trong cột B. Trong ví dụ dưới đây, chúng ta lấy hai mảng đại diện cho cột A và cột B. Khi áp dụng hàm lexsort () để sắp xếp đầu tiên theo cột A và sau đó theo cột B ta nhận được kết quả sắp xếp là một mảng chứa chỉ số của các phần tử trong cột A.

import numpy as np
colA = [2,5,1,8,1] # First column
colB = [9,0,3,2,0] # Second column
# Sort by ColA and then by colB
sorted_index = np.lexsort((colB,colA))
print(sorted_index)
#print the result showing the
#column values as pairs
print [(colA[i],colB[i]) for i in sorted_index]

Chạy đoạn mã trên cho chúng ta kết quả sau -

[4 2 0 1 3]
[(1, 0), (1, 3), (2, 9), (5, 0), (8, 2)]

Như bạn có thể thấy hai giá trị thấp nhất trong colA là 1 và 1 ở vị trí chỉ mục 2 và 4. Nhưng kết quả hiển thị 4 và 2 theo thứ tự tăng dần vì các giá trị tương ứng trong cột B là 0 và 3 cũng được sắp xếp như đầu tiên 0 rồi đến 3, tạo ra kết quả là 4 và 2.