ข้ามไปเนื้อหา

NumPy

จากวิกิพีเดีย สารานุกรมเสรี
NumPy
ผู้ออกแบบทราวิส โอลิแฟนต์; พัฒนาจาก Numeric และ Numarray
นักพัฒนาโครงการชุมชน NumPy
วันที่เปิดตัวในชื่อ Numeric, ค.ศ. 1995; ในชื่อ NumPy, ค.ศ. 2006
รุ่นเสถียร
2.5.0 / 21 มิถุนายน ค.ศ. 2026
ที่เก็บข้อมูล
ภาษาที่เขียนไพทอน, ภาษาซี
ระบบปฏิบัติการข้ามแพลตฟอร์ม
ประเภทการวิเคราะห์เชิงตัวเลข, การคำนวณเชิงวิทยาศาสตร์, การเขียนโปรแกรมอาร์เรย์
สัญญาอนุญาตสัญญาอนุญาตบีเอสดีแบบแก้ไข
เว็บไซต์numpy.org

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. 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.
  2. 1 2 3 "NumPy". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  3. 1 2 "NumPy". NumFOCUS. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  4. "Release notes". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  5. 1 2 "About us". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  6. 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.
  7. 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.
  8. "NumPy 2.0.0 Release Notes". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  9. "Broadcasting". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  10. "Universal functions". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  11. "Linear algebra". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  12. "Random sampling". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  13. "NumPy C-API". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.
  14. "F2PY user guide and reference manual". NumPy Developers. สืบค้นเมื่อ 7 กรกฎาคม 2026.

อ่านเพิ่ม

[แก้]

แหล่งข้อมูลอื่น

[แก้]

Image วิกิมีเดียคอมมอนส์มีสื่อเกี่ยวกับ NumPy