np.std ใน NumPy ผมใช้สำหรับคำนวณส่วนเบี่ยงเบนมาตรฐาน (standard deviation) ของ array ได้ในบรรทัดเดียว เหมือน STDEV.P ใน Excel แต่ระวังด้วยครับ ค่า default ของ NumPy ต่างจาก Excel ตรงที่ใช้ population std ไม่ใช่ sample std
float64
คืน np.float64 ครับเมื่อ input เป็น array 1 มิติและไม่ระบุ axis ถ้าระบุ axis จะได้ ndarray แทน เช่น axis=0 บน matrix 3×3 ได้ array 3 ตัว
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| a | array_like | array หรือ list ที่ต้องการหา std เช่น [1, 2, 3] หรือ np.array([[1,2],[3,4]]) | |
| [axis]ไม่บังคับ | int | None | None | แกนที่จะคำนวณ None=คำนวณทุกตัว, axis=0=ตามแนวแถว (ได้ต่อคอลัมน์), axis=1=ตามแนวคอลัมน์ (ได้ต่อแถว) |
| [ddof]ไม่บังคับ | int | 0 | Degrees of freedom ที่ลบออกจาก N ตอนคำนวณ ddof=0 คือ population std (เหมือน STDEV.P ใน Excel), ddof=1 คือ sample std (เหมือน STDEV หรือ STDEV.S ใน Excel) |
| [keepdims]ไม่บังคับ | bool | False | ถ้า True จะรักษา dimension เดิมไว้ในผลลัพธ์ ใช้ตอนต้องการ broadcast กลับไปยัง array ต้นฉบับ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
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 ครับ 😎
ผมใช้ตัวเลขชุดเดียวกับที่ Wikipedia ใช้อธิบาย std ครับ ค่าเฉลี่ยคือ 5.0 แล้ว NumPy คำนวณ population std ออกมา ตรงกับ STDEV.P ใน Excel เลยครับ
ผมใส่ ddof=1 เพื่อให้ได้ sample standard deviation ครับ ผลลัพธ์จะตรงกับ =STDEV(10,20,30,40,50) ใน Excel เป๊ะ ถ้าข้อมูลที่มีเป็นแค่ตัวอย่าง (sample) จากประชากรทั้งหมด ต้องใส่ ddof=1 เสมอครับ
ผมใส่ axis=0 เพื่อคำนวณ std ตามแนวแถวครับ ได้ค่า std ต่อคอลัมน์ออกมา 3 ตัว เหมือนกับที่ Excel จะคำนวณ STDEV.P แยกให้แต่ละคอลัมน์ใน data range
ผมจำลองคะแนนสอบ 3 วิชาของนักเรียน 3 คนครับ ใส่ axis=1 ได้ std ต่อแถว = ความสม่ำเสมอของคะแนนแต่ละคน คนที่ได้ค่า std ต่ำ = คะแนนสม่ำเสมอ คนที่ได้ค่าสูง = คะแนนขึ้นๆ ลงๆ มาก
นี่คือ 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 แล้วคำนวณจากตัวที่เหลือให้อัตโนมัติเลยครับ
ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy std จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
np.max ใน NumPy ผมใช้หาค่ามากที่สุดใน array หรือตามแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เหมือนกับฟังก์ชัน MAX ใน Excel เลยครับ แต่รองรับข้อมูลหลายมิติได้ด้วยครับ
np.mean ใน NumPy ผมใช้สำหรับคำนวณค่าเฉลี่ยเลขคณิตของ array หรือของแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เร็วกว่าเขียน sum/len เองหลายเท่า และยังรองรับข้อมูลหลายมิติได้ด้วยครับ
np.median ใน NumPy ผมใช้สำหรับหาค่ามัธยฐาน (median) ของข้อมูลใน array เหมือนฟังก์ชัน MEDIAN ใน Excel เลยครับ จุดเด่นคือทนต่อ outlier ได้ดีกว่า np.mean มาก เพราะค่าสุดขั้วไม่ดึงให้ผลลัพธ์เบี้ยวครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่