在 Python 的科學計算生態中,NumPy 是基石,它提供了核心的 ndarray(N維陣列)物件。由於其底層由 C 和 Fortran 實現,NumPy 陣列在處理同質性數值資料時,無論是記憶體效率還是計算速度都遠勝於 Python 原生列表。「向量化」(Vectorization) — 即將運算表示為陣列和矩陣的操作 — 是發揮其高效能的關鍵。
NumPy 的核心功能包括:
陣列建立:可從 Python 列表轉換,或使用 arange, linspace, zeros, ones, diag, random.rand 等函式直接生成。陣列具有 .shape (形狀)、.size (元素數量) 和 .dtype (資料型別) 等屬性。
陣列操作與索引:
索引 (Indexing):使用方括號存取元素,如 M[1,1] 或 M[1,:] (存取整列)。
切片 (Slicing):使用 M[lower:upper:step] 語法提取子陣列,此操作建立的是原始資料的「視圖」(view),修改視圖會影響原始陣列。
花式索引 (Fancy Indexing):使用索引列表或布林遮罩 (boolean mask) 來選擇非連續的元素,例如 x[x > 5]。
線性代數與運算:NumPy 支援純量與陣列、陣列與陣列間的元素對元素 (element-wise) 運算。矩陣乘法則需使用 dot() 函式或將陣列轉換為 matrix 物件。此外,還提供矩陣轉置 (.T)、共軛 (conjugate)、求逆 (linalg.inv) 和行列式 (linalg.det) 等功能。
資料處理:內建 mean, std, min, max, sum 等統計函式,並可透過 axis 參數指定沿特定維度(如逐行或逐列)計算。
陣列塑形:reshape() (建立視圖) 和 flatten() (建立副本) 可改變陣列形狀,vstack 和 hstack 可堆疊組合陣列。
複製:由於賦值 (B = A) 只是建立參考,若需完全獨立的副本,必須使用 copy() 函式。
SciPy 函式庫建立在 NumPy 之上,提供了更進階的科學演算法,涵蓋積分、最佳化、訊號處理等領域。而資料視覺化主要由 Matplotlib 負責,它提供兩種 API:一種是類似 MATLAB、簡單易用的 pylab 介面;另一種是更強大靈活的物件導向 API,允許開發者透過 Figure 和 Axes 物件精確控制圖表的每一個元素,如設定圖表大小與解析度 (figsize, dpi)、添加標題 (set_title)、座標軸標籤 (set_xlabel) 和圖例 (legend),最終可使用 savefig() 將圖表儲存為多種高品質格式。