np.std ใน NumPy ผมใช้สำหรับคำนวณส่วนเบี่ยงเบนมาตรฐาน (standard deviation) ของ array ได้ในบรรทัดเดียว เหมือน STDEV.P ใน Excel แต่ระวังด้วยครับ ค่า default ของ NumPy ต่างจาก Excel ตรงที่ใช้ population std ไม่ใช่ sample std
np.std(a, axis, ddof)
np.std(a, axis, ddof)
float64
คืน np.float64 ครับเมื่อ input เป็น array 1 มิติและไม่ระบุ axis ถ้าระบุ axis จะได้ ndarray แทน เช่น axis=0 บน matrix 3×3 ได้ array 3 ตัว
| Argument | Type | Required | Default | Description |
|---|---|---|---|---|
| a | array_like | Yes | array หรือ list ที่ต้องการหา std เช่น [1, 2, 3] หรือ np.array([[1,2],[3,4]]) | |
| axis | int | None | Optional | None | แกนที่จะคำนวณ None=คำนวณทุกตัว, axis=0=ตามแนวแถว (ได้ต่อคอลัมน์), axis=1=ตามแนวคอลัมน์ (ได้ต่อแถว) |
| ddof | int | Optional | 0 | Degrees of freedom ที่ลบออกจาก N ตอนคำนวณ ddof=0 คือ population std (เหมือน STDEV.P ใน Excel), ddof=1 คือ sample std (เหมือน STDEV หรือ STDEV.S ใน Excel) |
| keepdims | bool | Optional | False | ถ้า True จะรักษา dimension เดิมไว้ในผลลัพธ์ ใช้ตอนต้องการ broadcast กลับไปยัง array ต้นฉบับ |
np.std(arr)np.std(arr)
2.0
np.std(arr, ddof=1)np.std(arr, ddof=1)
15.811388300841896
np.std(matrix, axis=0)np.std(matrix, axis=0)
[2.44948974 2.44948974 2.44948974]
np.std(scores, axis=1)np.std(scores, axis=1)
[ 4.0824829 15.45603083 1.63299316]
นี่คือ gotcha ที่ผมเจอบ่อยมากครับ Excel STDEV และ STDEV.S ใช้ sample std (ddof=1) แต่ np.std ใช้ population std (ddof=0) เป็น default สองค่านี้ต่างกันจริงๆ ครับ โดยเฉพาะเมื่อ n น้อย วิธีแก้คือเพิ่ม ddof=1 ใน NumPy เพื่อให้ตรงกับ Excel เลยครับ ถ้าต้องการ STDEV.P ใน Excel (population) ก็ใช้ np.std ค่า default ได้เลย
ง่ายมากครับ np.var คือ variance ซึ่งเป็น std ยกกำลัง 2 นั่นเอง np.std = sqrt(np.var) ทั้งคู่รองรับ axis และ ddof เหมือนกัน ผมใช้ std เมื่อต้องการหน่วยเดียวกับข้อมูลต้นฉบับ (เช่น บาท หรือ คะแนน) และใช้ var เมื่อต้องส่งค่าเข้าสูตรสถิติที่ต้องการ variance โดยตรงครับ
np.std จะคืน nan ทันทีเมื่อเจอ NaN แม้ตัวเดียวครับ ถ้าข้อมูลอาจมีค่า missing ผมแนะนำให้ใช้ np.nanstd แทน มัน ignore NaN แล้วคำนวณจากตัวที่เหลือให้อัตโนมัติเลยครับ
np.std คำนวณส่วนเบี่ยงเบนมาตรฐาน ซึ่งบอกว่าข้อมูลกระจายตัวออกจากค่าเฉลี่ยมากแค่ไหนครับ ค่ายิ่งสูง = ข้อมูลยิ่งกระจาย ยิ่งต่ำ = ข้อมูลอยู่ใกล้ค่าเฉลี่ย ถ้าไม่ระบุ axis จะคำนวณจากทุกตัวใน array พร้อมกัน ถ้าระบุ axis จะได้ค่า std ต่อแถวหรือต่อคอลัมน์
ที่เจ๋งคือ np.std รองรับ matrix หลายมิติด้วย axis parameter ตัวเดียว และทำงานเร็วมากเพราะ C backend เหมาะกับงาน data science ที่ต้องตรวจสอบ spread ของข้อมูลก่อนเทรน model ✨
ส่วนตัวผมใช้ np.std บ่อยมากตอนทำ z-score normalization ครับ แต่มีจุดที่ต้องระวังหนึ่งอย่างคือ NumPy ใช้ population std (ddof=0) เป็น default ต่างจาก Excel STDEV ที่ใช้ sample std (ddof=1) ถ้าข้อมูลเป็น sample จากประชากรใหญ่ ผมจะเพิ่ม ddof=1 ทุกครั้งเพื่อให้ตรงกับ Excel ครับ 😎