โดยพื้นฐานแล้วคุณต้องทำargsort
สิ่งที่จำเป็นสำหรับการติดตั้งจะขึ้นอยู่กับว่าคุณต้องการใช้ไลบรารี่ภายนอก (เช่น NumPy) หรือหากคุณต้องการคงไว้ซึ่ง pure-Python โดยไม่ต้องพึ่งพา
คำถามที่คุณต้องถามตัวเองคือ: คุณต้องการ
- ดัชนีที่จะเรียงลำดับอาร์เรย์ / รายการ
- ดัชนีที่องค์ประกอบจะมีในเรียงลำดับอาร์เรย์ / รายการ
น่าเสียดายที่ตัวอย่างในคำถามไม่ได้บอกสิ่งที่ต้องการเพราะทั้งคู่จะให้ผลลัพธ์เดียวกัน:
>>> arr = np.array([1, 2, 3, 100, 5])
>>> np.argsort(np.argsort(arr))
array([0, 1, 2, 4, 3], dtype=int64)
>>> np.argsort(arr)
array([0, 1, 2, 4, 3], dtype=int64)
การเลือกargsort
ใช้งาน
ถ้าคุณมี NumPy ที่จำหน่ายของคุณคุณก็สามารถใช้ฟังก์ชันหรือวิธีการnumpy.argsort
numpy.ndarray.argsort
การดำเนินการที่ไม่มี NumPy ถูกกล่าวถึงในคำตอบอื่น ๆ อยู่แล้วดังนั้นฉันจะสรุปวิธีแก้ปัญหาที่เร็วที่สุดตามคำตอบมาตรฐานที่นี่
def argsort(l):
return sorted(range(len(l)), key=l.__getitem__)
รับดัชนีที่จะเรียงลำดับอาร์เรย์ / รายการ
ในการรับดัชนีที่จะเรียงลำดับอาร์เรย์ / รายการคุณสามารถโทรหาargsort
อาร์เรย์หรือรายการ ฉันใช้รุ่น NumPy ที่นี่ แต่การใช้ Python ควรให้ผลลัพธ์ที่เหมือนกัน
>>> arr = np.array([3, 1, 2, 4])
>>> np.argsort(arr)
array([1, 2, 0, 3], dtype=int64)
ผลลัพธ์มีดัชนีที่จำเป็นในการรับอาร์เรย์ที่เรียงลำดับ
เนื่องจากอาร์เรย์ที่เรียงลำดับจะเป็น[1, 2, 3, 4]
อาร์เรย์ argsorted มีดัชนีขององค์ประกอบเหล่านี้ในแบบดั้งเดิม
- ค่าที่น้อยที่สุดคือ
1
และมันก็เป็นที่ดัชนีเดิมดังนั้นองค์ประกอบแรกของผลที่ได้คือ1
1
2
ที่ดัชนีเดิมดังนั้นองค์ประกอบที่สองของผลที่ได้คือ2
2
3
ที่ดัชนีเดิมดังนั้นองค์ประกอบที่สามของผลที่ได้คือ0
0
- ค่าที่มากที่สุด
4
และมันก็เป็นที่ดัชนีเดิมดังนั้นองค์ประกอบสุดท้ายของผลที่ได้คือ3
3
รับดัชนีที่องค์ประกอบจะมีในเรียงลำดับอาร์เรย์ / รายการ
ในกรณีนี้คุณจะต้องสมัครargsort
สองครั้ง :
>>> arr = np.array([3, 1, 2, 4])
>>> np.argsort(np.argsort(arr))
array([2, 0, 1, 3], dtype=int64)
ในกรณีนี้ :
- องค์ประกอบแรกของเดิม
3
ซึ่งเป็นค่าที่ใหญ่เป็นอันดับสามจึงจะมีดัชนี2
ในอาร์เรย์เรียง / 2
รายการเพื่อให้องค์ประกอบแรกคือ
- องค์ประกอบที่สองของเดิม
1
ซึ่งเป็นค่าที่น้อยที่สุดจึงจะมีดัชนี0
ในอาร์เรย์เรียง / 0
รายการเพื่อให้องค์ประกอบที่สองคือ
- องค์ประกอบที่สามของเดิม
2
ซึ่งเป็นค่าที่สองที่มีขนาดเล็กที่สุดจึงจะมีดัชนี1
ในอาร์เรย์เรียง / 1
รายการดังนั้นองค์ประกอบที่สามคือ
- องค์ประกอบที่สี่ของเดิม
4
ซึ่งเป็นค่าที่มากที่สุดจึงจะมีดัชนี3
ในอาร์เรย์เรียง / 3
รายการเพื่อให้องค์ประกอบสุดท้ายคือ