2021年10月20日 星期三

Python 學習筆記 : SciPy 的子套件

一直想透過學習 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 官網教學文件 : 


由於 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 相關的好書 :

Python資料運算與分析實戰 (中久喜健司, 旗標, 2018)

沒有留言 :