วิธีใช้ฟังก์ชัน 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