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

SciPy

จากวิกิพีเดีย สารานุกรมเสรี
SciPy
ผู้ออกแบบแทรวิส โอลิแฟนต์, เพียรู ปีเตอร์สัน, เอริก โจนส์
นักพัฒนาโครงการชุมชน SciPy
วันที่เปิดตัวประมาณ ค.ศ. 2001
รุ่นเสถียร
1.18.0 / 19 มิถุนายน 2026; 37 วันก่อน (2026-06-19)
ที่เก็บข้อมูล
ภาษาที่เขียนภาษาไพทอน, Cython, ภาษาซี, ภาษาซีพลัสพลัส; มีโค้ดและไลบรารีพื้นฐานเชิงตัวเลขที่เกี่ยวข้องกับ Fortran
ระบบปฏิบัติการข้ามแพลตฟอร์ม
ประเภทแม่แบบ:คลัง (โปรแกรม)สำหรับการคำนวณเชิงวิทยาศาสตร์, การวิเคราะห์เชิงตัวเลข
สัญญาอนุญาตBSD 3-Clause
เว็บไซต์scipy.org

SciPy (อ่านว่า “ไซพาย”) เป็นไลบรารีแบบโอเพนซอร์สของภาษาไพทอนสำหรับการคำนวณเชิงวิทยาศาสตร์ การวิเคราะห์เชิงตัวเลข และงานคำนวณทางเทคนิค เอกสารทางการอธิบาย SciPy ว่าเป็นชุดอัลกอริทึมพื้นฐานสำหรับ scientific computing ในไพทอน โดยมีเครื่องมือสำหรับงานสำคัญ เช่น การหาค่าที่เหมาะที่สุด การอินทิเกรต การประมาณค่าในช่วง ปัญหาค่าเจาะจง สมการพีชคณิต สมการเชิงอนุพันธ์ สถิติ และปัญหาเชิงตัวเลขอีกหลายประเภท[1]

SciPy สร้างต่อยอดจาก NumPy ซึ่งจัดเตรียมโครงสร้างข้อมูลอาร์เรย์หลายมิติและฟังก์ชันคำนวณพื้นฐาน ส่วน SciPy เพิ่มอัลกอริทึมและโครงสร้างข้อมูลเฉพาะทาง เช่น เมทริกซ์เบาบาง, k-dimensional tree, solver เชิงเส้นและไม่เชิงเส้น, ฟังก์ชันพิเศษ, สัญญาณและภาพ, สถิติ และเครื่องมือการคำนวณทางวิทยาศาสตร์ที่กว้างกว่า NumPy[2] ด้วยเหตุนี้ SciPy จึงเป็นรากฐานหนึ่งของระบบนิเวศ scientific Python และถูกใช้โดยไลบรารีระดับสูงกว่า เช่น scikit-learn, scikit-image และเครื่องมือวิทยาศาสตร์ข้อมูลจำนวนมาก[2]

SciPy เริ่มพัฒนาประมาณ ค.ศ. 2001 เมื่อแทรวิส โอลิแฟนต์, เอริก โจนส์ และเพียรู ปีเตอร์สันรวมโค้ดเชิงตัวเลขหลายส่วนเข้าเป็นแพ็กเกจเดียวบนฐานของ Numeric ซึ่งเป็นบรรพบุรุษของ NumPy[3] ปัจจุบันรุ่นเสถียรล่าสุดคือ SciPy 1.18.0 เผยแพร่เมื่อวันที่ 19 มิถุนายน ค.ศ. 2026[4][5] รุ่นนี้ต้องใช้ Python 3.12–3.14 และ NumPy 2.0.0 ขึ้นไป[6]

ชื่อ

[แก้]

ชื่อ SciPy เขียนด้วยตัวอักษร S และ P เป็นตัวใหญ่ และอ่านว่า “ไซพาย” ตามหน้าโครงการ[1] ชื่อนี้มีความสัมพันธ์กับคำว่า scientific Python แต่ไม่ควรขยายเป็น “Scientific Python” เสมอไป เพราะคำดังกล่าวอาจหมายถึงระบบนิเวศซอฟต์แวร์วิทยาศาสตร์ภาษาไพทอนโดยรวม และยังอาจสับสนกับโครงการเก่าชื่อ ScientificPython ของ Konrad Hinsen ที่แยกต่างหากจาก SciPy[7]

ในภาษาไทย บทความนี้ใช้ “SciPy” เป็นชื่อหลักและใช้คำว่า “ไลบรารี” ตามศัพท์เดิมที่ใช้ในบทความภาษาไพทอนและบทความซอฟต์แวร์เชิงวิทยาศาสตร์อื่นของวิกิพีเดียไทย

ประวัติ

[แก้]

ในคริสต์ทศวรรษ 1990 ชุมชนภาษาไพทอนเริ่มสนใจการคำนวณเชิงตัวเลขมากขึ้น แต่ไพทอนเดิมยังไม่มีอาร์เรย์หลายมิติและไลบรารีเชิงตัวเลขที่สมบูรณ์เท่าภาษาอย่าง MATLAB หรือ Fortran แพ็กเกจ Numeric จึงเกิดขึ้นเพื่อเพิ่มอาร์เรย์และการคำนวณเชิงตัวเลขให้ไพทอน และต่อมากลายเป็นฐานสำคัญของโครงการในตระกูล scientific Python[8]

ประมาณ ค.ศ. 2001 แทรวิส โอลิแฟนต์, เอริก โจนส์ และเพียรู ปีเตอร์สันรวมโค้ดที่พวกเขาเขียนขึ้นและเรียกแพ็กเกจใหม่ว่า SciPy แพ็กเกจนี้ให้ชุดฟังก์ชันและอัลกอริทึมเชิงตัวเลขมาตรฐานบนฐานของ Numeric[3] ไม่นานหลังจากนั้น เฟร์นันโด เปเรซเผยแพร่ IPython และจอห์น ดี. ฮันเตอร์เผยแพร่ Matplotlib ทำให้ระบบนิเวศ scientific Python เริ่มมีองค์ประกอบครบขึ้น ได้แก่ การคำนวณเชิงตัวเลข เชลล์โต้ตอบ และการสร้างกราฟ[8]

ใน ค.ศ. 2005–2006 NumPy เกิดขึ้นจากการรวมแนวคิดของ Numeric และ Numarray และกลายเป็นโครงสร้างอาร์เรย์หลักที่ SciPy ใช้ในเวลาต่อมา[9] SciPy 1.0 เผยแพร่ในปลาย ค.ศ. 2017 หลังโครงการเริ่มต้นประมาณ 16 ปี และบทความ “SciPy 1.0: fundamental algorithms for scientific computing in Python” ตีพิมพ์ใน Nature Methods ใน ค.ศ. 2020 เพื่อสรุปบทบาท ความสามารถ และแนวทางพัฒนาของโครงการ[2]

หลัง ค.ศ. 2020 SciPy ยังคงปรับตัวตามการเปลี่ยนแปลงของ NumPy และภาษาไพทอน เช่น การรองรับ NumPy 2.x ตั้งแต่ SciPy 1.13.0, การรองรับ Python 3.13 และ free-threading binaries ในบางรุ่น, และการรองรับ Python 3.14 ในสาย 1.16.x[4] SciPy 1.18.0 ใน ค.ศ. 2026 เพิ่มการปรับปรุงสำคัญด้าน BLAS/LAPACK, การแปลโค้ด Fortran ที่เหลือเป็น C, การรองรับ Python Array API ที่กว้างขึ้น และการปรับปรุงหลายโมดูล เช่น fft, linalg, optimize, signal, sparse และ stats[6]

ลักษณะและขอบเขต

[แก้]

SciPy มุ่งให้เครื่องมือเชิงตัวเลขระดับกลางและระดับต่ำสำหรับวิทยาศาสตร์และวิศวกรรม ไม่ใช่สภาพแวดล้อมแบบครบวงจรทุกด้านเหมือน MATLAB และไม่ใช่เฟรมเวิร์กการเรียนรู้เชิงลึกแบบ PyTorch หรือ TensorFlow โดยทั่วไป SciPy ให้ฟังก์ชันและโครงสร้างข้อมูลที่โครงการอื่นนำไปประกอบเป็นเครื่องมือระดับสูงกว่า

หน้าแรกของโครงการสรุปจุดเด่นสามด้าน ได้แก่ เป็นชุดอัลกอริทึมพื้นฐาน ใช้ได้กว้างขวางในหลายสาขา และทำหน้าที่เป็นส่วนขยายของ NumPy พร้อมโครงสร้างข้อมูลพิเศษ เช่น เมทริกซ์เบาบางและ k-dimensional tree[1] ลักษณะนี้ทำให้ SciPy อยู่กึ่งกลางระหว่าง NumPy ซึ่งให้พื้นฐานอาร์เรย์กับการคำนวณเชิงเวกเตอร์ และไลบรารีเฉพาะทางอย่าง scikit-learn หรือ scikit-image

โครงสร้างข้อมูลและความสัมพันธ์กับ NumPy

[แก้]

SciPy ใช้ ndarray ของ NumPy เป็นโครงสร้างข้อมูลพื้นฐานสำหรับอาร์เรย์หลายมิติ ผู้ใช้จึงมักส่งข้อมูลเข้า SciPy ในรูปอาร์เรย์ NumPy และได้รับผลลัพธ์กลับมาเป็นอาร์เรย์ NumPy หรือวัตถุที่เข้ากันได้[9] NumPy มีฟังก์ชันพื้นฐาน เช่น พีชคณิตเชิงเส้น การแปลงฟูรีเย และ random number generation อยู่แล้ว แต่ SciPy ให้ฟังก์ชันที่กว้างและเฉพาะทางกว่าในหลายด้าน[2]

SciPy ยังให้โครงสร้างข้อมูลเฉพาะทาง เช่น sparse matrices และ sparse arrays สำหรับข้อมูลที่มีค่าศูนย์จำนวนมาก, LinearOperator สำหรับแทนตัวดำเนินการเชิงเส้นโดยไม่ต้องสร้างเมทริกซ์เต็ม, และ k-dimensional tree สำหรับงานค้นหาจุดใกล้สุดและเรขาคณิตเชิงคำนวณ[10][2]

โมดูลหลัก

[แก้]

SciPy แบ่งความสามารถออกเป็นโมดูลย่อยจำนวนมาก โดยเอกสาร API ระบุ namespace สาธารณะและแนวทางนำเข้าโมดูล เช่น ใช้ from scipy import optimize แล้วเรียก optimize.curve_fit(...)[10] โมดูลสำคัญมีดังนี้

โมดูลหน้าที่โดยย่อ
scipy.clusterการจัดกลุ่มแบบลำดับชั้น, vector quantization และ k-means
scipy.constantsค่าคงที่ทางกายภาพและตัวแปลงหน่วย
scipy.datasetsชุดข้อมูลตัวอย่างสำหรับสาธิตการประมวลผลภาพและข้อมูล
scipy.differentiateการหาอนุพันธ์เชิงตัวเลขอันดับหนึ่งและอันดับสอง
scipy.fftการแปลงฟูรีเยแบบเร็วและอัลกอริทึมที่เกี่ยวข้อง
scipy.fftpackอินเทอร์เฟซเก่าของการแปลงฟูรีเย
scipy.integrateการอินทิเกรตเชิงตัวเลขและการแก้สมการเชิงอนุพันธ์สามัญ
scipy.interpolateการประมาณค่าในช่วงและฟังก์ชัน spline
scipy.ioอินพุต/เอาต์พุตข้อมูล เช่น ไฟล์ MATLAB และ Matrix Market
scipy.linalgพีชคณิตเชิงเส้น เช่น การแก้ระบบสมการ ค่าเจาะจง และการแยกตัวประกอบเมทริกซ์
scipy.ndimageการประมวลผลภาพหลายมิติ
scipy.odrorthogonal distance regression
scipy.optimizeการหาค่าที่เหมาะที่สุด การหาราก สมการไม่เชิงเส้น และ curve fitting
scipy.signalการประมวลผลสัญญาณ ฟิลเตอร์ และการวิเคราะห์สัญญาณ
scipy.sparseเมทริกซ์/อาร์เรย์เบาบางและอัลกอริทึมที่เกี่ยวข้อง
scipy.spatialโครงสร้างเชิงพื้นที่ k-d tree, convex hull, Delaunay triangulation และระยะทาง
scipy.specialฟังก์ชันพิเศษทางคณิตศาสตร์
scipy.statsสถิติ การแจกแจงความน่าจะเป็น การทดสอบสมมติฐาน และฟังก์ชันสุ่ม

โมดูลเก่า scipy.fftpack ยังมีอยู่เพื่อความเข้ากันย้อนหลัง แต่ในงานใหม่มักใช้ scipy.fft ซึ่งเป็น API รุ่นใหม่กว่า

การนำไปใช้และประสิทธิภาพ

[แก้]

แม้ SciPy เป็นไลบรารีของไพทอน แต่ส่วนสำคัญของการคำนวณไม่ได้ดำเนินการด้วยลูปไพทอนบริสุทธิ์ทั้งหมด โครงการใช้โค้ดที่เขียนด้วย C, C++, Cython, Pythran และไลบรารีพื้นฐานเชิงตัวเลข เช่น BLAS และ LAPACK เพื่อให้คำนวณได้เร็ว[11] เอกสาร FAQ ทางการอธิบายว่า SciPy เป็นชุดเครื่องมือวิทยาศาสตร์และเชิงตัวเลขแบบโอเพนซอร์สที่มีสัญญาอนุญาต BSD และรองรับงานอย่างฟังก์ชันพิเศษ การอินทิเกรต ODE solver การหาค่าที่เหมาะที่สุด และเครื่องมืออื่น ๆ[12]

SciPy 1.18.0 มีการปรับปรุงเชิงลึกด้านประสิทธิภาพและการบำรุงรักษา เช่น รองรับรูปแบบ build ของ BLAS/LAPACK หลายแบบรวมถึง LP64 และ ILP64 ปรับปรุง ILP64 ในไลบรารีหลายส่วน และแปลโค้ด Fortran ที่เหลือเป็น C จนมีทางเลือกทดลองในการสร้างแบบไม่พึ่ง Fortran สำหรับนักพัฒนา[6] ข้อมูลนี้ควรเขียนอย่างระมัดระวังว่าเป็นพัฒนาการของ build และโค้ดภายใน ไม่ใช่แปลว่า SciPy ไม่มีความเกี่ยวข้องกับ BLAS/LAPACK หรือประวัติ Fortran อีกต่อไป

การติดตั้งและรุ่นที่รองรับ

[แก้]

เอกสารติดตั้งทางการของ SciPy แนะนำหลายแนวทาง ได้แก่ การติดตั้งแบบ project-based ด้วย uv หรือ pixi, การติดตั้งใน environment ด้วย pip หรือ conda, การใช้ system package manager และการ build จากซอร์สสำหรับนักพัฒนา[13] คำสั่งทั่วไปสำหรับผู้ใช้ pip คือ:

python -m pip install scipy

สำหรับผู้ใช้ conda หรือ mamba สามารถติดตั้งจาก conda-forge ได้ เช่น:

conda install scipy

SciPy 1.18.0 ต้องใช้ Python 3.12–3.14 และ NumPy 2.0.0 ขึ้นไป[6] เอกสาร toolchain ระบุว่า SciPy พยายามรักษาความเข้ากันได้กับ Python และ NumPy หลายรุ่นพร้อมกัน โดยทั่วไปการเลิกสนับสนุน Python รุ่นเก่าจะใช้แนวทางประมาณ 42 เดือนหลังรุ่นนั้นออก และมักเกิดในรุ่นกลางปีของ SciPy[11]

Python Array API และพัฒนาการล่าสุด

[แก้]

ระบบนิเวศไพทอนเชิงวิทยาศาสตร์กำลังขยายจาก NumPy ไปยังไลบรารีอาร์เรย์หลายชนิด เช่น CuPy, PyTorch และ JAX SciPy จึงเริ่มรองรับ Python Array API standard ในบางส่วน เพื่อให้ฟังก์ชันบางกลุ่มทำงานกับอาร์เรย์จาก backend อื่นได้ดีขึ้น ใน SciPy 1.18.0 เอกสาร release notes ระบุว่า Array API support ปรับปรุงขึ้นมาก และมีฟังก์ชันอย่างน้อย 21 รายการได้การรองรับใหม่ ขณะที่ฟังก์ชันหลายตัวใน scipy.stats รองรับ lazy arrays และ JAX JIT มากขึ้น[6]

อย่างไรก็ตาม ความสามารถนี้ยังไม่ทำให้ SciPy กลายเป็นไลบรารี GPU/deep learning เต็มรูปแบบโดยอัตโนมัติ ผู้ใช้ยังต้องตรวจเอกสารของแต่ละฟังก์ชันและ backend ที่ใช้อยู่ เพราะการรองรับ Array API ยังเป็นเรื่องที่ทยอยขยายเป็นส่วน ๆ

ตัวอย่างโค้ด

[แก้]

ตัวอย่างการอินทิเกรตฟังก์ชัน:

from scipy import integrate
import numpy as np

result, error = integrate.quad(np.sin, 0, np.pi)
print(result)

ตัวอย่างการหารากของสมการ:

from scipy import optimize

def f(x):
    return x**2 - 2

root = optimize.root_scalar(f, bracket=[0, 2])
print(root.root)

ตัวอย่างการใช้การแจกแจงทางสถิติ:

from scipy import stats

p = stats.norm.cdf(1.96)
print(p)

ระบบนิเวศที่เกี่ยวข้อง

[แก้]

SciPy เป็นส่วนหนึ่งของระบบนิเวศ scientific Python ร่วมกับ NumPy, Matplotlib, pandas, IPython/Jupyter, SymPy, scikit-learn และ scikit-image หน้า SciPy.org สำหรับโครงการวิทยาศาสตร์ระบุแพ็กเกจแกนของระบบนิเวศ เช่น NumPy, SciPy, Matplotlib, IPython, SymPy และ pandas[14] ไลบรารีระดับสูงมักใช้ SciPy ในส่วนที่ต้องการอัลกอริทึมเชิงตัวเลขหรือสถิติ เช่น scikit-learn ใช้ SciPy ร่วมกับ NumPy สำหรับงาน machine learning คลาสสิก

คำว่า “SciPy” ยังใช้กับครอบครัวงานประชุมของผู้ใช้และนักพัฒนาซอฟต์แวร์กลุ่มนี้ เช่น SciPy Conference ในสหรัฐอเมริกา, EuroSciPy ในยุโรป และ SciPy.in ในอินเดีย การใช้คำว่า “Scientific Python” จึงอาจหมายถึงระบบนิเวศกว้างกว่าตัวไลบรารี SciPy เพียงตัวเดียว

การกำกับดูแล การสนับสนุน และสัญญาอนุญาต

[แก้]

SciPy เป็นโครงการชุมชนที่พัฒนาบน GitHub และเผยแพร่ภายใต้ BSD 3-Clause license ซึ่งอนุญาตให้ใช้ได้ทั้งงานเสรี งานวิจัย และเชิงพาณิชย์ภายใต้เงื่อนไขของสัญญาอนุญาต[12][15] FAQ ทางการระบุว่า SciPy ดาวน์โหลดใช้ฟรีและใช้ได้ตามเงื่อนไขของ BSD license[12]

ด้านการสนับสนุนทางการเงิน SciPy เป็นโครงการที่ได้รับการสนับสนุนผ่าน NumFOCUS ซึ่งทำหน้าที่เป็นองค์กรไม่แสวงกำไรด้านการเงินและการบริหารให้โครงการ scientific open source หลายโครงการ[16] SciPy.org ยังระบุว่าเงินบริจาคจัดการผ่าน NumFOCUS ซึ่งส่งต่อให้โครงการ SciPy และให้บริการด้านบริหารกับกฎหมายแก่ทีมพัฒนา[17]

ข้อจำกัด

[แก้]

SciPy เหมาะกับงานคำนวณเชิงตัวเลขทั่วไปบนข้อมูลขนาดกลางถึงใหญ่ในหน่วยความจำ แต่ไม่ใช่เครื่องมือแบบ distributed computing โดยตรง หากข้อมูลใหญ่เกินหน่วยความจำหรือจำเป็นต้องใช้คลัสเตอร์/GPU จำนวนมาก ผู้ใช้มักต้องใช้เครื่องมืออื่นร่วม เช่น Dask, CuPy, JAX, PyTorch หรือไลบรารีเฉพาะทางของระบบนั้น

อีกข้อจำกัดคือการติดตั้งจากซอร์สอาจซับซ้อน เนื่องจากต้องอาศัย compiler, BLAS/LAPACK, Cython หรือเครื่องมือ build อื่น เอกสารติดตั้งจึงแนะนำให้ผู้ใช้ทั่วไปใช้ binary wheels หรือแพ็กเกจจาก conda-forge เมื่อเป็นไปได้[13][11]

ดูเพิ่ม

[แก้]

อ้างอิง

[แก้]
  1. 1 2 3 "SciPy". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  2. 1 2 3 4 5 Virtanen, Pauli; และคณะ (2020). "SciPy 1.0: fundamental algorithms for scientific computing in Python". Nature Methods. 17 (3): 261–272. doi:10.1038/s41592-019-0686-2. PMID 32015543.
  3. 1 2 "History of SciPy". SciPy old wiki. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  4. 1 2 "News". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  5. "scipy". Python Package Index. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  6. 1 2 3 4 5 "SciPy 1.18.0 Release Notes". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  7. ข้อมูลโครงบทความและประเด็น “Scientific Python versus ScientificPython” อ้างจากซอร์สโค้ดบทความภาษาอังกฤษเรื่อง SciPy ที่ผู้ใช้อัปโหลดประกอบการเขียนบทความนี้
  8. 1 2 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.
  9. 1 2 Harris, Charles R.; และคณะ (2020). "Array programming with NumPy". Nature. 585: 357–362. doi:10.1038/s41586-020-2649-2.
  10. 1 2 "SciPy API". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  11. 1 2 3 "Toolchain Roadmap". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  12. 1 2 3 "Frequently Asked Questions". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  13. 1 2 "Installation". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  14. "SciPy.org". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  15. "SciPy License". GitHub / SciPy. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  16. "SciPy". NumFOCUS. สืบค้นเมื่อ 8 กรกฎาคม 2026.
  17. "About Us". SciPy community. สืบค้นเมื่อ 8 กรกฎาคม 2026.

อ่านเพิ่ม

[แก้]
  • Nunez-Iglesias, Juan; van der Walt, Stéfan; Dashnow, Harriet (2017). Elegant SciPy: The Art of Scientific Python. O'Reilly Media. ISBN 978-1491922873.
  • Virtanen, Pauli; และคณะ (2020). "SciPy 1.0: fundamental algorithms for scientific computing in Python". Nature Methods. 17 (3): 261–272. doi:10.1038/s41592-019-0686-2.

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

[แก้]

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