NumPy
กราฟของฟังก์ชัน y = sin(x) สร้างด้วย NumPy และ Matplotlib | |
| ผู้ออกแบบ | ทราวิส โอลิแฟนต์; พัฒนาจาก Numeric และ Numarray |
|---|---|
| นักพัฒนา | โครงการชุมชน NumPy |
| วันที่เปิดตัว | ในชื่อ Numeric, ค.ศ. 1995; ในชื่อ NumPy, ค.ศ. 2006 |
| รุ่นเสถียร | 2.5.0
/ 21 มิถุนายน ค.ศ. 2026 |
| ที่เก็บข้อมูล | |
| ภาษาที่เขียน | ไพทอน, ภาษาซี |
| ระบบปฏิบัติการ | ข้ามแพลตฟอร์ม |
| ประเภท | การวิเคราะห์เชิงตัวเลข, การคำนวณเชิงวิทยาศาสตร์, การเขียนโปรแกรมอาร์เรย์ |
| สัญญาอนุญาต | สัญญาอนุญาตบีเอสดีแบบแก้ไข |
| เว็บไซต์ | numpy |
NumPy (ออกเสียงประมาณ “นัมไพ”) เป็นไลบรารีโอเพนซอร์สสำหรับภาษาไพทอน ใช้ในการคำนวณเชิงตัวเลขและการจัดการอาร์เรย์หลายมิติขนาดใหญ่ แกนหลักของ NumPy คือโครงสร้างข้อมูล ndarray หรืออาร์เรย์ n มิติ ซึ่งเก็บข้อมูลชนิดเดียวกันอย่างมีแบบแผนในหน่วยความจำ และทำงานร่วมกับฟังก์ชันคณิตศาสตร์ระดับสูงจำนวนมาก[1][2]
NumPy เป็นรากฐานสำคัญของระบบนิเวศการคำนวณเชิงวิทยาศาสตร์ในภาษาไพทอน ไลบรารีจำนวนมาก เช่น SciPy, Matplotlib, แพนดัส, scikit-learn, OpenCV, xarray และไลบรารีด้านการเรียนรู้ของเครื่อง ใช้หรือรองรับอาร์เรย์ของ NumPy เป็นโครงสร้างข้อมูลพื้นฐาน[1][3] เว็บไซต์ทางการเรียก NumPy ว่า “แพ็กเกจพื้นฐานสำหรับการคำนวณเชิงวิทยาศาสตร์ด้วยไพทอน” และระบุว่ามีจุดเด่นเรื่องอาร์เรย์ n มิติ การกระจายค่า การจัดทำดัชนี การแพร่กระจายขนาดหรือ broadcasting พีชคณิตเชิงเส้น การแปลงฟูรีเย และตัวสร้างเลขสุ่ม[2]
รุ่นเสถียรล่าสุดตามเว็บไซต์ทางการคือ NumPy 2.5.0 เผยแพร่เมื่อวันที่ 21 มิถุนายน ค.ศ. 2026[2][4] NumPy เป็นโครงการโอเพนซอร์สภายใต้สัญญาอนุญาตบีเอสดีแบบแก้ไข และเป็นโครงการที่ได้รับการสนับสนุนด้านการเงิน กฎหมาย และงานบริหารจาก NumFOCUS[5]
ประวัติ
[แก้]ภาษาไพทอนไม่ได้ถูกออกแบบมาเพื่อการคำนวณเชิงตัวเลขโดยเฉพาะ แต่ได้รับความสนใจจากนักวิทยาศาสตร์และวิศวกรตั้งแต่ช่วงแรกของภาษา ใน ค.ศ. 1995 มีการตั้งกลุ่มสนใจพิเศษชื่อ matrix-sig เพื่อออกแบบแพ็กเกจอาร์เรย์สำหรับไพทอน กลุ่มนี้รวมถึงควีโด ฟัน โรสซึม ผู้ออกแบบภาษาไพทอน ซึ่งปรับปรุงบางส่วนของไวยากรณ์ เช่น การทำดัชนีและการ slicing เพื่อให้เหมาะกับงานอาร์เรย์มากขึ้น[6]
แพ็กเกจอาร์เรย์สำคัญชุดแรกคือ Numeric ซึ่งเริ่มจากงานของจิม ฟุลตัน และต่อมาจิม ฮูกูนินขยายให้รองรับอาร์เรย์หลายมิติ Numeric ได้รับอิทธิพลจากภาษาหรือระบบคำนวณอาร์เรย์หลายแบบ เช่น APL, MATLAB, Fortran, S และ S-PLUS[7] ต่อมามีแพ็กเกจ Numarray ซึ่งออกแบบให้ยืดหยุ่นกว่าและมีประสิทธิภาพดีในอาร์เรย์ขนาดใหญ่ แต่ช้ากว่า Numeric ในงานอาร์เรย์ขนาดเล็ก ทำให้ชุมชนต้องใช้สองแพ็กเกจควบคู่กันอยู่ระยะหนึ่ง[7]
ใน ค.ศ. 2005 ทราวิส โอลิแฟนต์เริ่มรวมจุดเด่นของ Numeric และ Numarray เข้าด้วยกัน และเผยแพร่ NumPy 1.0 ใน ค.ศ. 2006 เพื่อให้ชุมชนมีแพ็กเกจอาร์เรย์เดียวที่ใช้ร่วมกันได้[7] NumPy แยกออกจาก SciPy เพื่อให้ผู้ใช้สามารถติดตั้งออบเจ็กต์อาร์เรย์พื้นฐานโดยไม่ต้องติดตั้งแพ็กเกจวิทยาศาสตร์ขนาดใหญ่ทั้งหมด การเปลี่ยนผ่านนี้ทำให้ NumPy กลายเป็นฐานร่วมของไลบรารีวิทยาศาสตร์ข้อมูลและการคำนวณเชิงวิทยาศาสตร์ของไพทอนในเวลาต่อมา
NumPy 2.0 ซึ่งเผยแพร่ใน ค.ศ. 2024 เป็นรุ่นใหญ่ครั้งแรกนับตั้งแต่ NumPy 1.0 และมีการเปลี่ยนแปลงระดับ API และ ABI ที่ส่งผลต่อโค้ด downstream บางส่วน[8] การเผยแพร่รุ่นนี้สะท้อนการพัฒนาโครงการระยะยาว ทั้งการทำความสะอาด API เก่า การปรับปรุงระบบชนิดข้อมูล และการเตรียมความเข้ากันได้สำหรับไพทอนรุ่นใหม่
คุณลักษณะ
[แก้]ndarray
[แก้]โครงสร้างข้อมูลหลักของ NumPy คือ ndarray ซึ่งย่อจาก n-dimensional array อาร์เรย์ชนิดนี้เก็บข้อมูลชนิดเดียวกันในหน่วยความจำและมีเมทาดาทา เช่น ชนิดข้อมูล รูปร่างของอาร์เรย์ และ strides เพื่อบอกวิธีตีความข้อมูลในหน่วยความจำ[1] แนวคิดนี้ทำให้อาร์เรย์ของ NumPy ทำงานเร็วกว่า list ของไพทอนในงานเชิงตัวเลขจำนวนมาก เพราะข้อมูลถูกจัดเก็บอย่างหนาแน่นและฟังก์ชันจำนวนมากทำงานในระดับ C แทนที่จะวนซ้ำทีละรายการในไพทอน
อาร์เรย์ของ NumPy รองรับการ slicing, indexing, reshaping, transposition และการสร้าง view ของข้อมูลเดิมโดยไม่ต้องคัดลอกข้อมูลเสมอไป คุณสมบัตินี้ช่วยลดการใช้หน่วยความจำและทำให้สามารถเชื่อมข้อมูลกับไลบรารีที่เขียนด้วย C, C++ หรือ Fortran ได้ง่ายขึ้น[1]
การเขียนโปรแกรมแบบเวกเตอร์และ broadcasting
[แก้]NumPy ส่งเสริมการเขียนโปรแกรมแบบเวกเตอร์ คือเขียนการคำนวณให้ทำงานกับอาร์เรย์ทั้งชุดในครั้งเดียว แทนการวนลูปด้วยไพทอนทีละสมาชิก ตัวอย่างเช่น การบวกอาร์เรย์สองชุดหรือการคำนวณฟังก์ชันตรีโกณมิติกับทุกสมาชิกสามารถเขียนสั้นและอ่านง่ายกว่าเดิม และมักทำงานเร็วกว่าการวนลูปในไพทอน
อีกคุณสมบัติสำคัญคือ broadcasting ซึ่งทำให้ NumPy สามารถคำนวณอาร์เรย์ที่มีรูปร่างต่างกันได้ หากรูปร่างเหล่านั้นเข้ากันตามกฎของ broadcasting เช่น การบวกเวกเตอร์หนึ่งมิติเข้ากับเมทริกซ์หลายแถวโดยไม่ต้องสร้างสำเนาเวกเตอร์ซ้ำทั้งเมทริกซ์[9]
ฟังก์ชันสากล
[แก้]ฟังก์ชันสากลหรือ universal function มักเรียกย่อว่า ufunc เป็นฟังก์ชันที่ทำงานแบบสมาชิกต่อสมาชิกกับอาร์เรย์ เช่น np.sin, np.cos, np.exp, np.add และ np.multiply[10] ufunc ช่วยให้การคำนวณทางคณิตศาสตร์กับอาร์เรย์เขียนได้กระชับและทำงานอย่างมีประสิทธิภาพ รวมถึงรองรับ broadcasting และการจัดการชนิดข้อมูลในตัว
พีชคณิตเชิงเส้น การแปลงฟูรีเย และเลขสุ่ม
[แก้]NumPy มีฟังก์ชันด้านพีชคณิตเชิงเส้นในโมดูล numpy.linalg เช่น การคูณเมทริกซ์ การหา determinant การแก้ระบบสมการเชิงเส้น และการแยกค่าเอกพจน์ โดยการคำนวณหลายอย่างพึ่งพาไลบรารีพื้นฐานอย่าง BLAS และ LAPACK[11] NumPy ยังมีโมดูลสำหรับการแปลงฟูรีเยแบบไม่ต่อเนื่องใน numpy.fft และระบบตัวสร้างเลขสุ่มใน numpy.random ซึ่งใช้ในงานจำลอง การสุ่มตัวอย่าง และสถิติขั้นพื้นฐาน[12]
C API และ F2PY
[แก้]NumPy มี C API สำหรับเชื่อมต่อโค้ดไพทอนกับไลบรารีที่เขียนด้วยภาษาระดับต่ำ และมี F2PY ซึ่งช่วยสร้างส่วนเชื่อมต่อระหว่างไพทอนกับ Fortran[13][14] คุณสมบัติเหล่านี้ทำให้ NumPy ใช้เป็นสะพานระหว่างไพทอนกับระบบคำนวณความเร็วสูงที่มีอยู่เดิมในภาษา C, C++ และ Fortran ได้
ตัวอย่าง
[แก้]โดยทั่วไปนิยม import NumPy ด้วยชื่อย่อ np:
import numpy as np
การสร้างอาร์เรย์:
x = np.array([1, 2, 3])
y = np.arange(10)
print(x)
print(y)
การคำนวณแบบเวกเตอร์:
a = np.array([1, 2, 3, 6])
b = np.linspace(0, 2, 4)
print(a - b)
print(a ** 2)
ฟังก์ชันสากล:
a = np.linspace(-np.pi, np.pi, 100)
b = np.sin(a)
c = np.cos(a)
พีชคณิตเชิงเส้น:
a = np.array([[1, 2, 3],
[3, 4, 6.7],
[5, 9.0, 5]])
b = np.array([3, 2, 1])
x = np.linalg.solve(a, b)
print(x)
ตัวอย่าง broadcasting:
m = np.array([[1, 2, 3],
[4, 5, 6]])
v = np.array([10, 20, 30])
print(m + v)
ข้อจำกัด
[แก้]NumPy มีประสิทธิภาพสูงเมื่อการคำนวณสามารถเขียนเป็นการดำเนินการบนอาร์เรย์หรือฟังก์ชันเวกเตอร์ได้ แต่โค้ดที่ต้องวนลูปซับซ้อนในไพทอนอาจยังทำงานช้า เพราะยังถูกตีความโดยตัวแปลภาษาไพทอนตามปกติ นอกจากนี้ การทำ vectorization บางแบบอาจสร้างอาร์เรย์ชั่วคราวขนาดใหญ่ ทำให้ใช้หน่วยความจำมากขึ้น[1]
อาร์เรย์ของ NumPy โดยทั่วไปอยู่ในหน่วยความจำของเครื่องเดียว งานข้อมูลขนาดใหญ่มาก งานกระจายบนหลายเครื่อง หรือการคำนวณบน GPU จึงมักต้องใช้ไลบรารีอื่นที่เลียนแบบหรือขยายแนวคิดของ NumPy เช่น Dask สำหรับอาร์เรย์แบบกระจาย, CuPy สำหรับ GPU ผ่าน CUDA, JAX สำหรับการคำนวณอัตโนมัติและตัวเร่งฮาร์ดแวร์, หรือ PyTorch และ TensorFlow ในงานการเรียนรู้ของเครื่อง[1] อย่างไรก็ตาม ไลบรารีเหล่านี้จำนวนมากยังออกแบบ API ให้คล้าย NumPy เพราะ NumPy กลายเป็นมาตรฐานเชิงพฤตินัยของการเขียนโปรแกรมอาร์เรย์ในไพทอน
ระบบนิเวศและการสนับสนุน
[แก้]NumPy เป็นโครงการชุมชนที่พัฒนาแบบเปิดบน GitHub และได้รับการสนับสนุนจากองค์กรไม่แสวงหากำไร NumFOCUS ซึ่งช่วยดูแลด้านการเงิน กฎหมาย และงานบริหารของโครงการ[5] โครงการนี้เป็นส่วนหนึ่งของระบบนิเวศ SciPy และมักถูกใช้ร่วมกับไลบรารีอื่น เช่น SciPy สำหรับอัลกอริทึมวิทยาศาสตร์, Matplotlib สำหรับการสร้างกราฟ, pandas สำหรับตารางข้อมูล, scikit-learn สำหรับการเรียนรู้ของเครื่อง และ Jupyter สำหรับสมุดบันทึกเชิงคำนวณ
NumFOCUS ระบุว่า NumPy เป็นโครงสร้างข้อมูลสากลที่ช่วยให้การแลกเปลี่ยนข้อมูลระหว่างอัลกอริทึมเป็นไปได้ และเป็นโครงการพื้นฐานของชุดเครื่องมือคำนวณเชิงวิทยาศาสตร์ในไพทอน[3]
ดูเพิ่ม
[แก้]อ้างอิง
[แก้]- 1 2 3 4 5 6 Harris, Charles R.; และคณะ (2020). "Array programming with NumPy". Nature. 585: 357–362. doi:10.1038/s41586-020-2649-2. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- 1 2 3 "NumPy". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- 1 2 "NumPy". NumFOCUS. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- ↑ "Release notes". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- 1 2 "About us". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- ↑ Millman, K. Jarrod; Aivazis, Michael (2011). "Python for Scientists and Engineers". Computing in Science & Engineering. 13 (2): 9–12. doi:10.1109/MCSE.2011.36.
- 1 2 3 Oliphant, Travis E. (2007). "Python for Scientific Computing". Computing in Science & Engineering. 9 (3): 10–20. doi:10.1109/MCSE.2007.58.
- ↑ "NumPy 2.0.0 Release Notes". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- ↑ "Broadcasting". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- ↑ "Universal functions". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- ↑ "Linear algebra". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- ↑ "Random sampling". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- ↑ "NumPy C-API". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- ↑ "F2PY user guide and reference manual". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
อ่านเพิ่ม
[แก้]- Oliphant, Travis E. (2006). Guide to NumPy. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- McKinney, Wes (2022). Python for Data Analysis (3rd ed.). O'Reilly Media. ISBN 9781098104030. สืบค้นเมื่อ 7 กรกฎาคม 2026.
- VanderPlas, Jake (2016). Python Data Science Handbook. O'Reilly Media. ISBN 9781491912058. สืบค้นเมื่อ 7 กรกฎาคม 2026.
แหล่งข้อมูลอื่น
[แก้]
วิกิมีเดียคอมมอนส์มีสื่อเกี่ยวกับ NumPy
- เว็บไซต์ทางการ
- เอกสาร NumPy
- บทเรียน NumPy
- คลังซอร์สโค้ด NumPy ที่ GitHub
- หน้าโครงการ NumPy ที่ NumFOCUS