int64
สำหรับ array 1 มิติ argmax คืนค่าเป็นเลขจำนวนเต็มตัวเดียว (numpy int64) ที่บอกตำแหน่ง index ของค่าสูงสุดครับ ถ้าใส่ axis กับ array หลายมิติ จะได้กลับมาเป็น array ของตำแหน่งแทน
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| a | array_like | array (หรือ list) ที่จะหาตำแหน่งของค่าสูงสุด เช่น np.array([3, 7, 2]) — argmax จะคืน index ของค่ามากที่สุดในนั้น | |
| [axis]ไม่บังคับ | int | None | แกนที่จะหาตามนั้น สำหรับ array 2 มิติ axis=0 คือหาตามแต่ละคอลัมน์ (ไล่ลงในแนวตั้ง) axis=1 คือหาตามแต่ละแถว ถ้าไม่ใส่ numpy จะแผ่ array ให้แบนเป็นเส้นเดียวก่อนแล้วค่อยหา |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
เวลาผมอ่านโค้ด numpy ที่ AI เขียนมา np.argmax เป็นตัวที่เจอบ่อยมากครับ แต่คนชอบเข้าใจผิดกันเยอะ เพราะคำว่า max ในชื่อทำให้นึกว่ามันคืนค่าที่มากที่สุด — จริงๆ ไม่ใช่นะครับ มันคืน index (ตำแหน่ง) ของค่าที่มากที่สุดต่างหาก
คิดง่ายๆ ว่าถ้า array คือ [3, 7, 2] np.argmax จะตอบ 1 เพราะค่ามากสุด (7) อยู่ตำแหน่งที่ 1 (numpy นับ index เริ่มจาก 0 นะครับ) ส่วนตัวเลข 7 เองถ้าอยากได้ต้องใช้ np.max แทน
ที่เจ๋งคือถ้าใครคุ้นกับ Excel จะเห็นภาพทันที — np.argmax(a) ก็คือ MATCH(MAX(a), a, 0) ในคำสั่งเดียว หาตำแหน่งของค่ามากสุดให้เลย ไม่ต้องเขียนซ้อนสองชั้นเหมือน Excel ครับ และพอใช้กับ array 2 มิติ ยังระบุ axis ได้ว่าจะหาตามแถวหรือตามคอลัมน์ด้วย
ส่วนตัวผมใช้ argmax บ่อยสุดตอนทำ machine learning ครับ เวลาโมเดลทำนายความน่าจะเป็นของแต่ละ class ออกมา แล้วเราอยากรู้ว่า class ไหนได้คะแนนสูงสุด ก็ยิง np.argmax ทีเดียวจบ ได้เลขตำแหน่ง class ที่โมเดลมั่นใจที่สุดมาเลย 😎
array นี้ค่ามากที่สุดคือ 9 ซึ่งอยู่ตำแหน่งที่ 3 (numpy นับ 0, 1, 2, 3) ผมเลยได้คำตอบเป็น 3 ครับ ย้ำอีกที — ได้ "ตำแหน่ง" นะ ไม่ใช่เลข 9
ผมใส่ axis=1 เพื่อหาตำแหน่งค่าสูงสุดของแต่ละแถว แถวแรก [3, 7, 2] ค่ามากสุด 7 อยู่ตำแหน่ง 1 ส่วนแถวสอง [9, 1, 8] ค่ามากสุด 9 อยู่ตำแหน่ง 0 ผลเลยออกมาเป็น [1, 0] ครับ ถ้าเปลี่ยนเป็น axis=0 จะเป็นการไล่หาตามคอลัมน์แทน
ตัวอย่างนี้ผมจับคู่ให้ดูชัดๆ ครับ np.argmax(a) ได้ 3 = ตำแหน่งของค่ามากสุด ส่วน np.max(a) ได้ 9 = ตัวค่ามากสุดจริงๆ สองตัวนี้คนละหน้าที่กัน เวลาอ่านโค้ดอย่าสลับกันนะครับ
ต่างกันที่สิ่งที่คืนมาครับ np.max คืน "ค่า" ที่มากที่สุด ส่วน np.argmax คืน "ตำแหน่ง (index)" ของค่าที่มากที่สุด เช่น array [3, 7, 2] np.max ได้ 7 แต่ np.argmax ได้ 1 ผมจำง่ายๆ ว่าคำว่า arg ข้างหน้าแปลว่า argument หรือ "ตำแหน่ง" ของมันนั่นเอง
argmax จะคืนตำแหน่งของตัว "แรกสุด" ที่เจอครับ เช่น [1, 5, 5, 2] ค่า 5 มีสองตัว argmax จะตอบ 1 (ตัวซ้ายสุด) ไม่ใช่ 2 ตรงนี้เหมือน MATCH ใน Excel เป๊ะเลยครับ ที่จะเจอตัวแรกที่ตรงก่อน
ใช้ np.argmin ครับ ทำงานเหมือนกันทุกอย่าง แค่หาตำแหน่งของค่าน้อยที่สุดแทน ใส่ axis ได้เหมือนกัน ถ้าจำ argmax ได้ argmin ก็เป็นของแถมเลยครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy argmax จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
np.max ใน NumPy ผมใช้หาค่ามากที่สุดใน array หรือตามแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เหมือนกับฟังก์ชัน MAX ใน Excel เลยครับ แต่รองรับข้อมูลหลายมิติได้ด้วยครับ
np.sort ผมใช้เรียงค่าใน array ของ numpy จากน้อยไปมาก แล้วคืน array ใหม่ที่เรียงแล้วออกมา (ของเดิมไม่ถูกแตะต้อง) ถ้าใครคุ้นกับ SORT หรือเมนู Data > Sort ใน Excel บอกเลยว่าตัวนี้คือสายเดียวกันเลยครับ
numpy.where ผมใช้เลือกค่าจาก array ตามเงื่อนไขที่กำหนดครับ ถ้าให้เทียบง่ายๆ มันคือ IF ใน Excel นั่นแหละ แต่เก่งกว่าตรงที่ทำงานกับข้อมูลทั้ง array พร้อมกันในทีเดียว แถมยังใส่อาร์กิวเมนต์เดียวเพื่อหา index ที่ตรงเงื่อนไขได้อีกด้วย
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่