np.sum ใน NumPy ผมใช้สำหรับรวมค่าทุกตัวใน array หรือรวมตามแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เหมือนฟังก์ชัน SUM ใน Excel แต่ทำงานกับ array หลายมิติและเร็วกว่าการวน loop เองมากครับ
np.sum(a)
np.sum(a)
int64
คืนเป็น numpy scalar int64 เมื่อ input เป็น integer array และไม่ระบุ axis ครับ ถ้าระบุ 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 หรือ np.int64 ถ้าไม่ใส่จะเดาจาก input อัตโนมัติ |
| keepdims | bool | Optional | False | ถ้า True จะรักษา dimension เดิมไว้ในผลลัพธ์ ใช้ตอนต้องการ broadcast กลับไปยัง array ต้นฉบับ |
np.sum(arr)np.sum(arr)
6
np.sum(matrix, axis=0)np.sum(matrix, axis=0)
[12 15 18]
np.sum(matrix, axis=1)np.sum(matrix, axis=1)
[ 6 15 24]
np.sum(arr, dtype=np.int64)np.sum(arr, dtype=np.int64)
1000000
ต่างกันสามเรื่องครับ อย่างแรก np.sum เร็วกว่ามากบนข้อมูลขนาดใหญ่เพราะทำงานใน C ไม่ใช่ Python loop อย่างที่สอง np.sum รองรับ axis และ matrix หลายมิติได้ซึ่ง sum() ทำไม่ได้ อย่างที่สาม sum() จะรวม list ทั่วไปแต่ไม่รองรับ array หลายมิติ ผมใช้ sum() เฉพาะตอน list เล็กๆ ที่ไม่ได้ import numpy ครับ
np.sum จะคืน nan ทันทีถ้าเจอ NaN แม้แต่ตัวเดียวครับ เพราะ NaN มันแพร่กระจาย (propagates) ตามนิยามทางคณิตศาสตร์ ถ้าข้อมูลอาจมี missing ผมจะเปลี่ยนไปใช้ np.nansum แทนครับ มันข้าม NaN ไปแล้วรวมค่าที่เหลือให้เลย ปลอดภัยกว่าเยอะ
ผมจำแบบนี้ครับ axis=0 = รวมตาม ‘แถวที่ 0’ คือรวมในแนวดิ่ง (ลงตามแถว) ได้ค่าต่อคอลัมน์ ส่วน axis=1 = รวมตาม ‘คอลัมน์ที่ 1’ คือรวมในแนวนอน (ข้ามคอลัมน์) ได้ค่าต่อแถว หรือถ้าจำยาก ผมแนะนำให้ลองรันดูเลยครับ 2 นาทีก็รู้แล้วว่าได้ shape อะไร
np.sum เป็นฟังก์ชันที่ผมใช้บ่อยที่สุดตัวหนึ่งใน NumPy เลยครับ 😎
หลักการทำงานง่ายมาก รับ array (หรือ list) แล้วคืนผลรวมออกมา ถ้าไม่ระบุ axis จะรวมทุกตัวเลขใน array พร้อมกันเป็นค่าเดียว แต่ถ้าระบุ axis=0 จะรวมตามแนวแถว (ได้ผลรวมต่อคอลัมน์) หรือ axis=1 จะรวมตามแนวคอลัมน์ (ได้ผลรวมต่อแถว) — แนวคิดนี้เหมือนกับที่ผมเคยใช้ SUMIF หรือ SUM แบบ array ใน Excel เป๊ะเลย
ที่เจ๋งคือ np.sum เร็วกว่าการเขียน for loop รวมค่าเองหลายสิบเท่าครับ เพราะทำงานใน C ภายใน ข้อมูลล้านแถวก็จบใน milliseconds และยังรองรับ matrix กี่มิติก็ได้ด้วย axis เดียว ✨
ส่วนตัวผมใช้ np.sum บ่อยมากตอนคำนวณ loss function ใน machine learning หรือตอนต้องการ sanity check ว่าข้อมูลรวมกันแล้วถูกต้องไหม ถ้า array มี NaN ให้ใช้ np.nansum แทนครับ เพราะ np.sum ปกติจะคืน nan ถ้าเจอค่า missing