一直想透過學習 Scipy 把自己虛弱的數學底子好好地補一補, 但時間總是非常有限. 今天得空先將 SciPy 的常用子套件整理成一張表, 常回來看這張表就能提醒自己還有哪些是還沒學的.
SciPy 系列之前的筆記參考 :
SciPy 是以 Numpy 為基礎建構的開放原始碼科學運算套件, 它依賴底層以 Fortran 實作的演算法可以高效地操作 Numpy 陣列以進行各種數學運算, 其功能足以與商用的 Matlab 或開放原始碼的 Scilab, GSL, 以及 Octave 等軟體相匹敵.
Scipy 的功能分門別類放在下列子套件中 :
SciPy 常用子套件 | 功能與用途 |
scipy.cluster | 分群 (clustering) 運算 (例如 K-means) |
scipy.constants | 數學與物理常數 |
scipy.fftpack | 離散傅立葉 (Fourier) 轉換 |
scipy.integrate | 數值積分與求解常微分方程式 |
scipy.interpolate | 內插運算 (一維 & 多維內插, 徑向基函數內插, 平滑樣條 spline 等) |
scipy.io | 輸入與輸出 |
scipy.linalg | 線性代數 (求解線性方程組, 特徵值, 特徵向量, 矩陣分解等) |
scipy.signal | 訊號處理 (FIR 與 IIR 數位濾波器) |
scipy.stats | 統計函數 (連續 & 離散隨機變數的各種機率分布) |
scipy.stats.mstats | 遮罩陣列統計函數 |
scipy.sparse | 稀疏矩陣 |
scipy.sparse.linalg | 稀疏線性代數 |
scipy.sparse.csgraph | 壓縮的稀疏圖像函數 |
scipy.special | 特殊函數 |
scipy.spatial | 空間演算法與資料結構 |
scipy.optimize | 最佳化與求根 (求非線性方程組解, 資料擬合, 函數最小值等) |
scipy.odr | 正交距離回歸 |
scipy.ndimage | 多維影像處理 (影像濾波器, 傅立葉轉換, 影像內插, 旋轉等) |
scipy.misc | 雜項函數 (求導數, 載入心電圖等) |
由於 SciPy 已經相當龐大, 所以後來開發的科學計算相關套件都以獨立形式發布, 而非納入 SciPy 中成為其子套件, 例如機器學習套件 scikit-learn 與 scikit-image 等.
由於 SciPy 功能收納於各個子套件, 由於有些套件較龐大, 因此很少會用 import scipy 匯入整個套件, 通常會用 from scipy 方式匯入會使用到的子套件 (亦可加上 as 取一個簡名), 例如 :
from scipy import linalg
from scipy import linalg as la
然後用子套件名稱或簡名呼叫旗下函數來運算, 例如求解線性聯立方程組 :
a_ans=linalg.solve(a_coeff, a_const)
a_ans=la.solve(a_coeff, a_const)
雖然可以像 Numpy 那樣直接匯入 SciPy 並取個慣用簡名 sp, 但不建議這麼做 :
import scipy as sp
但這樣存取函數的路徑就較長了, 例如 :
a_ans=sp.linalg.solve(a_coeff, a_const)
另外一種方式是用 from 從子套件直接匯入會用到的函數, 例如 :
from scipy.linalg import solve
然後直接呼叫該函數做運算 :
a_ans=solve(a_coeff, a_const)
但這種方式要注意命名空間汙染問題 (勿自訂同名函數).
如果要匯入整個子套件且想要直接呼叫旗下函數, 可在 import 後面使用 *, 例如 :
from scipy.linalg import *
科學與工程科系的學生若能好好地掌握 Numpy 與 SciPy 的用法, 在學習研究上必然如虎添翼. 下面是幾本跟 SciPy 相關的好書 :
# 優雅的SciPy:Python科學研究的美學 (碁峰, 2018)
# Python資料運算與分析實戰 (中久喜健司, 旗標, 2018)
# Python 在大數據科學計算上的最佳實作 (佳魁, 張若愚, 2016)
# Introduction to the Tools of Scientific Computing (Springer, 2020) 4.3 節
沒有留言:
張貼留言