np.mean ใน NumPy ผมใช้สำหรับคำนวณค่าเฉลี่ยเลขคณิตของ array หรือของแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เร็วกว่าเขียน sum/len เองหลายเท่า และยังรองรับข้อมูลหลายมิติได้ด้วยครับ
np.mean(a)
np.mean(a)
float64
คืนเป็น np.float64 ครับเมื่อ input เป็น array 1 มิติทั่วไป ถ้าระบุ axis จะได้ ndarray แทน เช่น axis=0 บน matrix 3×3 ได้ array 3 ตัว
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| a | array_like | Yes | array หรือ list ที่ต้องการหาค่าเฉลี่ย เช่น [1, 2, 3] หรือ np.array([[1,2],[3,4]]) | |
| axis | int | None | Optional | None | แกนที่จะคำนวณ None=เฉลี่ยทุกตัว, axis=0=เฉลี่ยตามแถว (ได้ต่อคอลัมน์), axis=1=เฉลี่ยตามคอลัมน์ (ได้ต่อแถว) |
| dtype | dtype | Optional | None | ชนิดข้อมูลที่ใช้คำนวณ เช่น np.float64 สำหรับความแม่นยำสูง ถ้าไม่ใส่จะเดาจาก input อัตโนมัติ |
| keepdims | bool | Optional | False | ถ้า True จะรักษา dimension เดิมไว้ในผลลัพธ์ ใช้ตอนต้องการ broadcast กลับไปยัง array ต้นฉบับ |
np.mean(arr)np.mean(arr)
30.0
np.mean(matrix, axis=0)np.mean(matrix, axis=0)
[4. 5. 6.]
np.mean(matrix, axis=1)np.mean(matrix, axis=1)
[2. 5. 8.]
ได้ผลเหมือนกันเป๊ะครับ arr.mean() เป็น method บน ndarray ที่เรียก np.mean เบื้องหลัง ผมชอบใช้ arr.mean(axis=0) ตอน chaining เพราะอ่านง่ายกว่า แต่ถ้าส่ง list ธรรมดาเข้ามาต้องใช้ np.mean() แบบ function เพราะ list ไม่มี method .mean() ครับ
np.mean เป็นฟังก์ชันพื้นฐานที่ผมเปิดใช้งานตั้งแต่วันแรกที่เรียน NumPy เลยครับ 😎
หลักการทำงานคือรับ array (หรือ list) แล้วคืนค่าเฉลี่ยเลขคณิต (arithmetic mean) ออกมา ถ้าไม่ระบุ axis จะเฉลี่ยทุกตัวเลขใน array พร้อมกัน แต่ถ้าระบุ axis=0 จะเฉลี่ยตามแนวแถว (ได้ค่าต่อคอลัมน์) หรือ axis=1 เฉลี่ยตามแนวคอลัมน์ (ได้ค่าต่อแถว)
ที่เจ๋งคือ np.mean เร็วกว่า sum(arr)/len(arr) มากเพราะทำงานใน C ภายใน และยังรองรับ matrix 2D 3D ได้ด้วยพารามิเตอร์ axis เดียว ✨
ส่วนตัวผมใช้ np.mean บ่อยมากตอน normalize ข้อมูลก่อนส่งเข้า machine learning model หรือตอนเช็คค่ากลางอย่างรวดเร็ว ถ้ามี NaN ในข้อมูลผมจะเปลี่ยนไปใช้ np.nanmean แทนครับ เพราะ np.mean ปกติจะคืน nan ถ้าเจอค่า missing