np.sum ใน NumPy ผมใช้สำหรับรวมค่าทุกตัวใน array หรือรวมตามแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เหมือนฟังก์ชัน SUM ใน Excel แต่ทำงานกับ array หลายมิติและเร็วกว่าการวน loop เองมากครับ
int64
คืนเป็น numpy scalar int64 เมื่อ input เป็น integer array และไม่ระบุ axis ครับ ถ้าระบุ axis จะได้ ndarray แทน เช่น axis=0 บน matrix 3×3 ได้ array 3 ตัว
| อาร์กิวเมนต์ | ชนิด | ค่าเริ่มต้น | คำอธิบาย |
|---|---|---|---|
| a | array_like | array หรือ list ที่ต้องการรวม เช่น [1, 2, 3] หรือ np.array([[1,2],[3,4]]) | |
| [axis]ไม่บังคับ | int | None | None | แกนที่จะรวม None=รวมทุกตัวเป็นค่าเดียว, axis=0=รวมตามแถว (ได้ต่อคอลัมน์), axis=1=รวมตามคอลัมน์ (ได้ต่อแถว) |
| [dtype]ไม่บังคับ | dtype | None | ชนิดข้อมูลที่ใช้สะสมผลรวม เช่น np.float64 หรือ np.int64 ถ้าไม่ใส่จะเดาจาก input อัตโนมัติ |
| [keepdims]ไม่บังคับ | bool | False | ถ้า True จะรักษา dimension เดิมไว้ในผลลัพธ์ ใช้ตอนต้องการ broadcast กลับไปยัง array ต้นฉบับ |
[ ] = อาร์กิวเมนต์ที่ไม่บังคับ
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
ผมส่ง array 3 ตัวเข้าไป ได้ผลรวม 6 ออกมาครับ (1+2+3) ไม่ต้องวน loop หรือเขียน sum(list) เองเลย เขียนบรรทัดเดียวจบ และได้ผลลัพธ์เป็น numpy scalar int64 ด้วย
ผมใส่ axis=0 เพื่อรวมตามแนวแถวครับ ได้ผลรวมต่อคอลัมน์ออกมาเป็น ndarray คอลัมน์แรก (1+4+7)=12, คอลัมน์สอง (2+5+8)=15, คอลัมน์สาม (3+6+9)=18 คิดแบบ Excel ก็คือเหมือนใส่ SUM ไว้ที่ Row สุดท้ายของแต่ละคอลัมน์นั่นเองครับ
เปลี่ยนเป็น axis=1 คราวนี้ได้ผลรวมต่อแถวครับ แถวแรก (1+2+3)=6, แถวสอง (4+5+6)=15, แถวสาม (7+8+9)=24 ผลลัพธ์ออกมาเป็น ndarray เหมือนกัน ผมใช้แบบนี้ตอนต้องการ row total เหมือนคอลัมน์ Total ทางขวาสุดของตาราง Excel ครับ
กรณีข้อมูลเป็น int32 และค่ารวมอาจเกิน 2 พันล้าน ผมจะระบุ dtype=np.int64 เพื่อให้สะสมผลรวมในพื้นที่ที่ใหญ่กว่าครับ ป้องกัน integer overflow ที่ทำให้ได้ค่าผิดพลาดอย่างเงียบๆ โดยไม่มี error แจ้ง ผมโดนแบบนี้มาครั้งหนึ่งแล้วครับ เสียเวลา debug นานมาก 😅
ต่างกันสามเรื่องครับ อย่างแรก 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 อะไร
ฟังก์ชันที่ผู้เขียนโยงไว้กับ numpy sum จัดกลุ่มตามหมวด · ชี้ที่ชื่อใดชื่อหนึ่ง แล้วฟังก์ชันที่ใช้คู่กันจะมีจุดทอง
np.max ใน NumPy ผมใช้หาค่ามากที่สุดใน array หรือตามแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เหมือนกับฟังก์ชัน MAX ใน Excel เลยครับ แต่รองรับข้อมูลหลายมิติได้ด้วยครับ
np.mean ใน NumPy ผมใช้สำหรับคำนวณค่าเฉลี่ยเลขคณิตของ array หรือของแต่ละแถว/คอลัมน์ใน matrix ได้ในคำสั่งเดียว เร็วกว่าเขียน sum/len เองหลายเท่า และยังรองรับข้อมูลหลายมิติได้ด้วยครับ
np.arange ใน NumPy ผมใช้สำหรับสร้าง array ของเลขที่เรียงกันตามช่วงที่กำหนด คล้ายกับ range() ใน Python แต่ได้ผลออกมาเป็น ndarray ที่เอาไปคำนวณทางคณิตศาสตร์ต่อได้ทันที ใช้บ่อยมากตอนสร้างแกน x สำหรับกราฟหรือสร้างชุดตัวเลขทดสอบครับ
ยังไม่มีบทความที่เกี่ยวข้องกับฟังก์ชันนี้
Comments
อีเมลของคุณจะไม่ถูกเผยแพร่