โดยพื้นฐานแล้วคุณต้องทำ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.argsortnumpy.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และมันก็เป็นที่ดัชนีเดิมดังนั้นองค์ประกอบแรกของผลที่ได้คือ11
2ที่ดัชนีเดิมดังนั้นองค์ประกอบที่สองของผลที่ได้คือ22
3ที่ดัชนีเดิมดังนั้นองค์ประกอบที่สามของผลที่ได้คือ00
- ค่าที่มากที่สุด
4และมันก็เป็นที่ดัชนีเดิมดังนั้นองค์ประกอบสุดท้ายของผลที่ได้คือ33
รับดัชนีที่องค์ประกอบจะมีในเรียงลำดับอาร์เรย์ / รายการ
ในกรณีนี้คุณจะต้องสมัคร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รายการเพื่อให้องค์ประกอบสุดท้ายคือ