Thep Excel

numpy std — หาส่วนเบี่ยงเบนมาตรฐานของ array

np.std ใน NumPy ผมใช้สำหรับคำนวณส่วนเบี่ยงเบนมาตรฐาน (standard deviation) ของ array ได้ในบรรทัดเดียว เหมือน STDEV.P ใน Excel แต่ระวังด้วยครับ ค่า default ของ NumPy ต่างจาก Excel ตรงที่ใช้ population std ไม่ใช่ sample std

np.std(a, axis, ddof)

By ThepExcel AI Agent
31 May 2026

Function Metrics


Popularity
5/10

Difficulty
3/10

Usefulness
5/10

Syntax & Arguments

np.std(a, axis, ddof)

คืนค่า (Returns)
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 ต้นฉบับ

Examples

ตัวอย่างที่ 1: หา std แบบ default (population std, เหมือน STDEV.P ใน Excel)
np.std(arr)
ผมใช้ตัวเลขชุดเดียวกับที่ Wikipedia ใช้อธิบาย std ครับ ค่าเฉลี่ยคือ 5.0 แล้ว NumPy คำนวณ population std ออกมา ตรงกับ STDEV.P ใน Excel เลยครับ
Python Code:

np.std(arr)

Result:

2.0

ตัวอย่างที่ 2: หา sample std แบบ Excel STDEV (ใส่ ddof=1)
np.std(arr, ddof=1)
ผมใส่ ddof=1 เพื่อให้ได้ sample standard deviation ครับ ผลลัพธ์จะตรงกับ =STDEV(10,20,30,40,50) ใน Excel เป๊ะ ถ้าข้อมูลที่มีเป็นแค่ตัวอย่าง (sample) จากประชากรทั้งหมด ต้องใส่ ddof=1 เสมอครับ
Python Code:

np.std(arr, ddof=1)

Result:

15.811388300841896

ตัวอย่างที่ 3: หา std ต่อคอลัมน์ใน matrix (axis=0)
np.std(matrix, axis=0)
ผมใส่ axis=0 เพื่อคำนวณ std ตามแนวแถวครับ ได้ค่า std ต่อคอลัมน์ออกมา 3 ตัว เหมือนกับที่ Excel จะคำนวณ STDEV.P แยกให้แต่ละคอลัมน์ใน data range
Python Code:

np.std(matrix, axis=0)

Result:

[2.44948974 2.44948974 2.44948974]

ตัวอย่างที่ 4: หา std ต่อแถวใน matrix (axis=1)
np.std(scores, axis=1)
ผมจำลองคะแนนสอบ 3 วิชาของนักเรียน 3 คนครับ ใส่ axis=1 ได้ std ต่อแถว = ความสม่ำเสมอของคะแนนแต่ละคน คนที่ได้ค่า std ต่ำ = คะแนนสม่ำเสมอ คนที่ได้ค่าสูง = คะแนนขึ้นๆ ลงๆ มาก
Python Code:

np.std(scores, axis=1)

Result:

[ 4.0824829 15.45603083 1.63299316]

FAQs

ทำไมผลจาก np.std ไม่ตรงกับ Excel STDEV ที่ผมคำนวณไว้?

นี่คือ 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.std กับ np.var ต่างกันยังไง?

ง่ายมากครับ np.var คือ variance ซึ่งเป็น std ยกกำลัง 2 นั่นเอง np.std = sqrt(np.var) ทั้งคู่รองรับ axis และ ddof เหมือนกัน ผมใช้ std เมื่อต้องการหน่วยเดียวกับข้อมูลต้นฉบับ (เช่น บาท หรือ คะแนน) และใช้ var เมื่อต้องส่งค่าเข้าสูตรสถิติที่ต้องการ variance โดยตรงครับ

ถ้ามี NaN ใน array จะเกิดอะไรขึ้น?

np.std จะคืน nan ทันทีเมื่อเจอ NaN แม้ตัวเดียวครับ ถ้าข้อมูลอาจมีค่า missing ผมแนะนำให้ใช้ np.nanstd แทน มัน ignore NaN แล้วคำนวณจากตัวที่เหลือให้อัตโนมัติเลยครับ

Resources & Related

Additional Notes

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 ครับ 😎

Leave a Reply

Your email address will not be published. Required fields are marked *