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

a.sort, sorted(a), np_argsort(a) และ np.lexsort(b, a) ใน Python


การจัดลำดับองค์ประกอบข้อมูลในลำดับเฉพาะเป็นการดำเนินการที่จำเป็นบ่อยครั้ง ในการจัดเรียงองค์ประกอบในอาร์เรย์ python จะใช้ฟังก์ชันที่ชื่อ sorted() และ array.sort()

เรียงลำดับ(อาร์เรย์)

ฟังก์ชันนี้ส่งคืนอาร์เรย์ที่เรียงลำดับโดยไม่ต้องแก้ไขอาร์เรย์ดั้งเดิม

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)

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

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

list.sort()

ฟังก์ชัน sort ส่งกลับอาร์เรย์ที่เรียงลำดับโดยทำการปรับเปลี่ยนแบบแทนที่อาร์เรย์ที่ให้มา ดังนั้นอาร์เรย์ดั้งเดิมจะได้รับการแก้ไขดังแสดงในตัวอย่างด้านล่าง

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

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

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

ดังนั้นฟังก์ชัน sorted() จึงช้ากว่า sort() เนื่องจากสร้างสำเนาของอาร์เรย์ดั้งเดิมแล้วแก้ไข

ต้องการการเรียงลำดับที่ซับซ้อนมากขึ้นโดยใช้ Numpy Numpy เป็นไลบรารี่หลามที่ใช้กันอย่างแพร่หลายในการประมวลผลข้อมูลทางวิทยาศาสตร์ เนื่องจากมีคุณลักษณะขั้นสูงมากมาย เราจะเห็นทั้งวิธีการจัดเรียง python แท้และวิธีการจัดเรียง Numpy ในตัวอย่างด้านล่าง

numpy.argsort

ฟังก์ชันใน numpy นี้จะคืนค่าดัชนีของอาร์เรย์ที่จัดเรียงแล้ว แทนที่จะเป็นองค์ประกอบอาร์เรย์ ในตัวอย่างด้านล่าง เรานำอาร์เรย์มาพิมพ์องค์ประกอบพร้อมกับดัชนีสำหรับแต่ละองค์ประกอบ จากนั้นเราใช้ฟังก์ชัน argsort ซึ่งให้ดัชนีของอาร์เรย์ที่จัดเรียงเป็นผลลัพธ์ และผลลัพธ์ก็คืออาร์เรย์ด้วย

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)

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

[ 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

ฟังก์ชันนี้ใช้สำหรับการเรียงลำดับโดยใช้คีย์การจัดเรียงหลายคีย์ที่เกี่ยวข้องกับอาร์เรย์มากกว่าหนึ่งชุด ตัวอย่างเช่น อันดับแรก เราจัดเรียงข้อมูลในคอลัมน์ A แล้วจึงจัดเรียงค่าในคอลัมน์ B ในตัวอย่างด้านล่าง เราจะนำอาร์เรย์สองชุดที่แทนคอลัมน์ A และคอลัมน์ B ไปใช้ ในการใช้ฟังก์ชัน lexsort() สำหรับการจัดเรียงตามคอลัมน์ A ก่อนแล้วจึงตามด้วยคอลัมน์ B เราได้ผลลัพธ์ของการเรียงลำดับเป็นอาร์เรย์ที่มีดัชนีขององค์ประกอบในคอลัมน์ 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]

การเรียกใช้โค้ดข้างต้นทำให้เราได้ผลลัพธ์ดังต่อไปนี้ -

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

ดังที่คุณเห็นค่าสองค่าต่ำสุดใน colA คือ 1 และ 1 ที่ตำแหน่งดัชนี 2 และ 4 แต่ผลลัพธ์จะแสดง 4 และ 2 เป็นลำดับจากน้อยไปมากตามค่าที่เกี่ยวข้องในคอลัมน์ B ซึ่งเท่ากับ 0 และ 3 จะถูกจัดเรียงเป็นอันดับแรกเช่นกัน 0 แล้ว 3 ทำให้ผลลัพธ์เป็น 4 และ 2