วิธีใช้ฟังก์ชัน NumPy argmax() ใน Python
เผยแพร่แล้ว: 2022-09-14ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีใช้ ฟังก์ชัน NumPy argmax() เพื่อค้นหาดัชนีขององค์ประกอบสูงสุดในอาร์เรย์
NumPy เป็นห้องสมุดที่ทรงพลังสำหรับการคำนวณทางวิทยาศาสตร์ใน Python; มันจัดเตรียมอาร์เรย์ N- มิติที่มีประสิทธิภาพมากกว่ารายการ Python หนึ่งในการดำเนินการทั่วไปที่คุณจะทำเมื่อทำงานกับอาร์เรย์ NumPy คือการหาค่าสูงสุดในอาร์เรย์ อย่างไรก็ตาม บางครั้งคุณอาจต้องการค้นหา ดัชนี ที่มีค่าสูงสุดเกิดขึ้น
ฟังก์ชัน argmax() ช่วยให้คุณค้นหาดัชนีของค่าสูงสุดในอาร์เรย์ทั้งแบบหนึ่งมิติและหลายมิติ มาเรียนรู้วิธีการทำงานกันต่อ
วิธีค้นหาดัชนีขององค์ประกอบสูงสุดใน NumPy Array
ในการปฏิบัติตามบทช่วยสอนนี้ คุณต้องติดตั้ง Python และ NumPy คุณสามารถเขียนโค้ดโดยเริ่ม Python REPL หรือเปิดโน้ตบุ๊ก Jupyter
อันดับแรก มานำเข้า NumPy ภายใต้นามแฝงปกติ np
import numpy as np คุณสามารถใช้ฟังก์ชัน NumPy max() เพื่อรับค่าสูงสุดในอาร์เรย์ (เลือกได้ตามแกนที่ระบุ)
array_1 = np.array([1,5,7,2,10,9,8,4]) print(np.max(array_1)) # Output 10 ในกรณีนี้ np.max(array_1) จะคืนค่า 10 ซึ่งถูกต้อง
สมมติว่าคุณต้องการค้นหาดัชนีที่ค่าสูงสุดเกิดขึ้นในอาร์เรย์ คุณสามารถใช้แนวทางสองขั้นตอนต่อไปนี้:
- ค้นหาองค์ประกอบสูงสุด
- ค้นหาดัชนีขององค์ประกอบสูงสุด
ใน array_1 ค่าสูงสุด 10 จะเกิดขึ้นที่ดัชนี 4 หลังจากการจัดทำดัชนีเป็นศูนย์ องค์ประกอบแรกอยู่ที่ดัชนี 0; องค์ประกอบที่สองอยู่ที่ดัชนี 1 เป็นต้น

หากต้องการค้นหาดัชนีที่เกิดค่าสูงสุด คุณสามารถใช้ฟังก์ชัน NumPy where() np.where(condition) คืนค่าอาร์เรย์ของดัชนีทั้งหมดที่มี condition เป็น True
คุณจะต้องแตะเข้าไปในอาร์เรย์และเข้าถึงรายการที่ดัชนีแรก ในการค้นหาว่าค่าสูงสุดเกิดขึ้นที่ใด เราตั้งค่า condition เป็น array_1==10 ; จำได้ว่า 10 เป็นค่าสูงสุดใน array_1
print(int(np.where(array_1==10)[0])) # Output 4 เราใช้ np.where() โดยมีเงื่อนไข เท่านั้น แต่นี่ ไม่ใช่ วิธีที่แนะนำให้ใช้ฟังก์ชันนี้
หมายเหตุ: NumPy โดยที่ () ฟังก์ชัน :
np.where(condition,x,y)คืนค่า:– องค์ประกอบจาก
xเมื่อเงื่อนไขเป็นTrueและ
– องค์ประกอบจากyเมื่อเงื่อนไขเป็นFalse
ดังนั้น เมื่อเชื่อมโยง np.max() และ np.where() เข้าด้วยกัน เราจะสามารถค้นหาองค์ประกอบสูงสุด ตามด้วยดัชนีที่เกิดขึ้น
แทนที่จะใช้กระบวนการสองขั้นตอนข้างต้น คุณสามารถใช้ฟังก์ชัน NumPy argmax() เพื่อรับดัชนีขององค์ประกอบสูงสุดในอาร์เรย์
ไวยากรณ์ของฟังก์ชัน NumPy argmax()
ไวยากรณ์ทั่วไปในการใช้ฟังก์ชัน NumPy argmax() มีดังนี้:
np.argmax(array,axis,out) # we've imported numpy under the alias npในไวยากรณ์ข้างต้น:
- array เป็นอาร์เรย์ NumPy ที่ถูกต้อง
- แกน เป็นพารามิเตอร์ทางเลือก เมื่อทำงานกับอาร์เรย์หลายมิติ คุณสามารถใช้พารามิเตอร์แกนเพื่อค้นหาดัชนีค่าสูงสุดตามแกนที่ระบุได้
- out เป็นพารามิเตอร์ทางเลือกอื่น คุณสามารถตั้งค่าพารามิเตอร์
outเป็นอาร์เรย์ NumPy เพื่อเก็บเอาต์พุตของฟังก์ชันargmax()
หมายเหตุ : จาก NumPy เวอร์ชัน 1.22.0 มีพารามิเตอร์
keepdimsเพิ่มเติม เมื่อเราระบุพารามิเตอร์axisในการเรียกใช้ฟังก์ชันargmax()อาร์เรย์จะลดลงตามแกนนั้น แต่การตั้งค่าพารามิเตอร์keepdimsเป็นTrueทำให้มั่นใจได้ว่าเอาต์พุตที่ส่งคืนจะมีรูปร่างเหมือนกับอาร์เรย์อินพุต
ใช้ NumPy argmax() เพื่อค้นหาดัชนีขององค์ประกอบสูงสุด
#1 . ให้เราใช้ฟังก์ชัน NumPy argmax() เพื่อค้นหาดัชนีขององค์ประกอบสูงสุดใน array_1
array_1 = np.array([1,5,7,2,10,9,8,4]) print(np.argmax(array_1)) # Output 4 ฟังก์ชัน argmax() คืนค่า 4 ซึ่งถูกต้อง!
#2 . หากเรากำหนด array_1 ใหม่ให้ 10 ครั้งเกิดขึ้นสองครั้ง ฟังก์ชัน argmax argmax() จะส่งกลับ เฉพาะ ดัชนีของการเกิดครั้งแรกเท่านั้น
array_1 = np.array([1,5,7,2,10,10,8,4]) print(np.argmax(array_1)) # Output 4 สำหรับตัวอย่างที่เหลือ เราจะใช้องค์ประกอบของ array_1 ที่เรากำหนดไว้ในตัวอย่างที่ 1
การใช้ NumPy argmax() เพื่อค้นหาดัชนีขององค์ประกอบสูงสุดในอาร์เรย์ 2 มิติ
มาเปลี่ยนรูปแบบ NumPy array array_1 เป็นอาร์เรย์สองมิติที่มีสองแถวและสี่คอลัมน์
array_2 = array_1.reshape(2,4) print(array_2) # Output [[ 1 5 7 2] [10 9 8 4]] สำหรับอาร์เรย์สองมิติ แกน 0 หมายถึงแถว และแกน 1 หมายถึงคอลัมน์ อาร์เรย์ NumPy ทำตาม การจัดทำดัชนีเป็นศูนย์ ดังนั้นดัชนีของแถวและคอลัมน์สำหรับอาร์เรย์ NumPy array_2 มีดังนี้:

ทีนี้มาเรียกฟังก์ชัน argmax argmax() ในอาร์เรย์สองมิติ array_2 กัน
print(np.argmax(array_2)) # Output 4 แม้ว่าเราจะเรียก argmax() บนอาร์เรย์สองมิติ แต่ก็ยังคงคืนค่า 4 ซึ่งเหมือนกับผลลัพธ์สำหรับอาร์เรย์หนึ่งมิติคือ array_1 จากส่วนก่อนหน้า
ทำไมสิ่งนี้ถึงเกิดขึ้น?
เนื่องจากเราไม่ได้ระบุค่าใดๆ สำหรับพารามิเตอร์แกน เมื่อไม่ได้ตั้งค่าพารามิเตอร์แกนนี้ โดยค่าเริ่มต้น ฟังก์ชัน argmax() จะส่งกลับดัชนีขององค์ประกอบสูงสุดตามอาร์เรย์ที่แบนราบ
อาร์เรย์แบบแบนคืออะไร? หากมีอาร์เรย์ N- มิติของรูปร่าง d1 x d2 x … x dN โดยที่ d1, d2 ถึง dN คือขนาดของอาร์เรย์ตามมิติ N ดังนั้นอาร์เรย์ที่ แบน แล้วจะเป็นอาร์เรย์ขนาดหนึ่งมิติที่ยาว d1 * d2 * … * dN.
ในการตรวจสอบว่าอาร์เรย์แบบแบนมีลักษณะอย่างไรสำหรับ array_2 คุณสามารถเรียกเมธอด flatten() ดังที่แสดงด้านล่าง:
array_2.flatten() # Output array([ 1, 5, 7, 2, 10, 9, 8, 4])ดัชนีขององค์ประกอบสูงสุดตามแถว (แกน = 0)
ไปหาดัชนีขององค์ประกอบสูงสุดตามแถว (แกน = 0) กัน
np.argmax(array_2,axis=0) # Output array([1, 1, 1, 1])ผลลัพธ์นี้อาจเข้าใจได้ยากเล็กน้อย แต่เราจะเข้าใจว่ามันทำงานอย่างไร
เราได้ตั้งค่าพารามิเตอร์ axis เป็นศูนย์ ( axis = 0 ) เนื่องจากเราต้องการค้นหาดัชนีขององค์ประกอบสูงสุดตามแถว ดังนั้น ฟังก์ชัน argmax() จะส่งกลับหมายเลขแถวที่มีองค์ประกอบสูงสุดเกิดขึ้น สำหรับแต่ละคอลัมน์ในสามคอลัมน์
ลองนึกภาพสิ่งนี้เพื่อความเข้าใจที่ดีขึ้น

จากไดอะแกรมด้านบนและเอาต์พุต argmax() เรามีดังต่อไปนี้:
- สำหรับคอลัมน์แรกที่ดัชนี 0 ค่าสูงสุด 10 เกิดขึ้นในแถวที่สอง ที่ดัชนี = 1
- สำหรับคอลัมน์ที่สองที่ดัชนี 1 ค่าสูงสุด 9 เกิดขึ้นในแถวที่สอง ที่ดัชนี = 1
- สำหรับคอลัมน์ที่สามและสี่ที่ดัชนี 2 และ 3 ค่าสูงสุด 8 และ 4 ทั้งคู่เกิดขึ้นในแถวที่สอง ที่ดัชนี = 1
นี่คือเหตุผลที่เรามีเอาต์พุต array([1, 1, 1, 1]) เนื่องจากองค์ประกอบสูงสุดตามแถวเกิดขึ้นในแถวที่สอง (สำหรับทุกคอลัมน์)
ดัชนีขององค์ประกอบสูงสุดตามคอลัมน์ (แกน = 1)
ต่อไป ลองใช้ฟังก์ชัน argmax() เพื่อค้นหาดัชนีขององค์ประกอบสูงสุดตามคอลัมน์
เรียกใช้ข้อมูลโค้ดต่อไปนี้และสังเกตผลลัพธ์
np.argmax(array_2,axis=1) array([2, 0])คุณสามารถแยกวิเคราะห์ผลลัพธ์ได้หรือไม่
เราได้ตั้งค่า axis = 1 เพื่อคำนวณดัชนีขององค์ประกอบสูงสุดตามคอลัมน์
ฟังก์ชัน argmax() ส่งกลับ สำหรับแต่ละแถว หมายเลขคอลัมน์ที่เกิดค่าสูงสุด
นี่คือคำอธิบายภาพ:

จากไดอะแกรมด้านบนและเอาต์พุต argmax() เรามีดังต่อไปนี้:
- สำหรับแถวแรกที่ดัชนี 0 ค่าสูงสุด 7 เกิดขึ้นในคอลัมน์ที่สาม ที่ดัชนี = 2
- สำหรับแถวที่สองที่ดัชนี 1 ค่าสูงสุด 10 เกิดขึ้นในคอลัมน์แรก ที่ดัชนี = 0
ฉันหวังว่าคุณจะเข้าใจความหมายของผลลัพธ์ array([2, 0])
การใช้พารามิเตอร์ Optional out ใน NumPy argmax()
คุณสามารถ out พารามิเตอร์ที่เป็นทางเลือกในฟังก์ชัน NumPy argmax() เพื่อเก็บเอาต์พุตในอาร์เรย์ NumPy
เริ่มต้นอาร์เรย์ของศูนย์เพื่อเก็บผลลัพธ์ของการเรียกใช้ฟังก์ชัน argmax() ก่อนหน้า - เพื่อค้นหาดัชนีของค่าสูงสุดตามคอลัมน์ ( axis= 1 )
out_arr = np.zeros((2,)) print(out_arr) [0. 0.] ตอนนี้ มาทบทวนตัวอย่างการหาดัชนีขององค์ประกอบสูงสุดตามคอลัมน์ ( axis = 1 ) และตั้งค่า out out_arr เราได้กำหนดไว้ข้างต้น
np.argmax(array_2,axis=1,out=out_arr) เราเห็นว่าล่าม Python โยน TypeError เนื่องจาก out_arr ถูกกำหนดค่าเริ่มต้นเป็นอาร์เรย์ของ floats โดยค่าเริ่มต้น
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) /usr/local/lib/python3.7/dist-packages/numpy/core/fromnumeric.py in _wrapfunc(obj, method, *args, **kwds) 56 try: ---> 57 return bound(*args, **kwds) 58 except TypeError: TypeError: Cannot cast array data from dtype('float64') to dtype('int64') according to the rule 'safe' ดังนั้น เมื่อตั้งค่าพารามิเตอร์ out เป็นอาร์เรย์เอาต์พุต สิ่งสำคัญคือต้องแน่ใจว่าเอาต์พุตอาร์เรย์มีรูปร่างและประเภทข้อมูลที่ถูกต้อง เนื่องจากดัชนีอาร์เรย์เป็นจำนวนเต็มเสมอ เราควรตั้งค่าพารามิเตอร์ dtype เป็น int เมื่อกำหนดอาร์เรย์เอาต์พุต
out_arr = np.zeros((2,),dtype=int) print(out_arr) # Output [0 0] ตอนนี้เราสามารถเรียกใช้ฟังก์ชัน argmax() กับทั้งพารามิเตอร์ axis และ out ได้ และคราวนี้ก็ทำงานโดยไม่มีข้อผิดพลาด
np.argmax(array_2,axis=1,out=out_arr) เอาต์พุตของฟังก์ชัน argmax argmax() สามารถเข้าถึงได้ในอาร์เรย์ out_arr
print(out_arr) # Output [2 0]บทสรุป
ฉันหวังว่าบทช่วยสอนนี้จะช่วยให้คุณเข้าใจวิธีใช้ฟังก์ชัน NumPy argmax() คุณสามารถเรียกใช้ตัวอย่างโค้ดในสมุดบันทึก Jupyter
มาทบทวนสิ่งที่เราได้เรียนรู้กัน
- ฟังก์ชัน NumPy argmax() จะคืนค่าดัชนีขององค์ประกอบสูงสุดในอาร์เรย์ หากองค์ประกอบสูงสุดเกิดขึ้นมากกว่าหนึ่งครั้งในอาร์เรย์ a ดังนั้น np.argmax(a) จะส่งกลับดัชนีของการเกิดขึ้นครั้งแรกขององค์ประกอบ
- เมื่อทำงานกับอาร์เรย์หลายมิติ คุณสามารถใช้พารามิเตอร์ แกน ทางเลือกเพื่อรับดัชนีขององค์ประกอบสูงสุดตามแกนเฉพาะ ตัวอย่างเช่น ในอาร์เรย์สองมิติ: โดยการตั้งค่า axis = 0 และ axis = 1 คุณจะได้รับดัชนีขององค์ประกอบสูงสุดตามแถวและคอลัมน์ตามลำดับ
- หากคุณต้องการเก็บค่าที่ส่งคืนในอาร์เรย์อื่น คุณสามารถตั้งค่าพารามิเตอร์ out ที่เป็นทางเลือกให้กับอาร์เรย์เอาต์พุตได้ อย่างไรก็ตาม อาร์เรย์เอาต์พุตควรมีรูปร่างและประเภทข้อมูลที่เข้ากันได้
ต่อไป ดูคำแนะนำเชิงลึกเกี่ยวกับชุด Python

