np.argmax ผมใช้หา index หรือตำแหน่งของค่าที่มากที่สุดใน array ครับ ย้ำว่ามันคืน “ตำแหน่ง” ไม่ใช่ “ตัวค่า” ถ้าใครเคยใช้ Excel มาก่อน ตัวนี้คือ MATCH(MAX(range), range, 0) นั่นเองครับ
np.argmax(a, axis)
np.argmax(a, axis)
int64
สำหรับ array 1 มิติ argmax คืนค่าเป็นเลขจำนวนเต็มตัวเดียว (numpy int64) ที่บอกตำแหน่ง index ของค่าสูงสุดครับ ถ้าใส่ axis กับ array หลายมิติ จะได้กลับมาเป็น array ของตำแหน่งแทน
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| a | array_like | Yes | array (หรือ list) ที่จะหาตำแหน่งของค่าสูงสุด เช่น np.array([3, 7, 2]) — argmax จะคืน index ของค่ามากที่สุดในนั้น | |
| axis | int | Optional | None | แกนที่จะหาตามนั้น สำหรับ array 2 มิติ axis=0 คือหาตามแต่ละคอลัมน์ (ไล่ลงในแนวตั้ง) axis=1 คือหาตามแต่ละแถว ถ้าไม่ใส่ numpy จะแผ่ array ให้แบนเป็นเส้นเดียวก่อนแล้วค่อยหา |
np.argmax(a)np.argmax(a)
3
np.argmax(a, axis=1)np.argmax(a, axis=1)
[1 0]
(np.argmax(a), np.max(a))(np.argmax(a), np.max(a))
(np.int64(3), np.int64(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 ที่ 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 ที่โมเดลมั่นใจที่สุดมาเลย 😎