NumPy 使用者指南
一份全面的入門概覽與技術指南,介紹 NumPy 的安裝、陣列操作、索引、廣播功能,以及與 C/C++ 的整合。
課程
課程總覽
📚 內容摘要
一份全面的入門概述與技術指南,涵蓋 NumPy 的安裝、陣列操作、索引、廣播機制,以及與 C/C++ 的整合。
透過官方 NumPy 指南,掌握科學計算在 Python 中的基礎。
作者: NumPy 社群
致謝: 由 NumPy 社群撰寫
🎯 學習目標
- 定義 NumPy 並識別其在科學計算型 Python 生態系統中的角色。
- 解釋為何 NumPy 比標準 Python 迴圈快得多,並運用「向量化」的概念說明。
- 執行各種環境(包括 Pip、Conda 及 Raspberry Pi)的安裝指令。
- 識別並解讀核心
ndarray屬性,如ndim、shape及dtype。 - 使用
linspace、reshape、vstack及hstack等函數執行陣列建立與操作。 - 對數值資料集應用元素級運算、通用函數(ufuncs)及線性代數求解器。
- 利用 NumPy 的標量類型與資訊工具(
iinfo、finfo)管理資料精確度,並避免溢位錯誤。 - 使用
genfromtxt以自訂分隔符、標頭與欄位選擇,靈活地從磁碟讀取資料。 - 應用通用廣播規則,預測並控制不同形狀陣列之間的互動。
- 管理記憶體參考,並透過
.base屬性避免自訂ndarray子類別中的「陷阱」。
🔹 第 1 課:介紹與環境設定
概覽: 本課介紹 NumPy 作為 Python 科學計算的核心函式庫,解釋其透過向量化帶來的性能優勢。學生將學習如何在各平台(Windows、Raspberry Pi、Conda、PyCharm)安裝該函式庫,並解決常見的安裝障礙,例如透過管理環境變數與系統依賴來排除 ImportError。
學習成果:
- 定義 NumPy 並識別其在科學計算型 Python 生態系統中的角色。
- 解釋為何 NumPy 比標準 Python 迴圈快得多,並運用「向量化」的概念說明。
- 執行各種環境(包括 Pip、Conda 及 Raspberry Pi)的安裝指令。
🔹 第 2 課:核心基礎與陣列操作
概覽: 本課深入介紹 NumPy 的 ndarray 物件,涵蓋其核心屬性、建立方法與基本數學運算。內容延伸至進階主題,包括高級索引(布林與整數索引)、形狀變換,以及重要的線性代數常式。完成此模組後,學習者將能有效儲存、轉換與分析多維資料結構。
學習成果:
- 識別並解讀核心
ndarray屬性,如ndim、shape及dtype。 - 使用
linspace、reshape、vstack及hstack等函數執行陣列建立與操作。 - 對數值資料集應用元素級運算、通用函數(ufuncs)及線性代數求解器。
🔹 第 3 課:進階資料處理與廣播
概覽: 本課探討 NumPy 的進階機制,專注於精確的資料類型管理、溢位處理,以及使用 genfromtxt 進行複雜的 I/O 操作。學生將掌握廣播機制在算術運算中的內部邏輯,記憶體層級的字節順序細節,以及針對異質資料集建立結構化/記錄陣列的方法。最後部分詳細說明透過自訂陣列容器擴展 NumPy,以及子類別化 ndarray 所需的正式協定。
學習成果:
- 利用 NumPy 的標量類型與資訊工具(
iinfo、finfo)管理資料精確度,並避免溢位錯誤。 - 使用
genfromtxt以自訂分隔符、標頭與欄位選擇,靈活地從磁碟讀取資料。 - 應用通用廣播規則,預測並控制不同形狀陣列之間的互動。
🔹 第 4 課:數值例外與語言介接
概覽: 本課探討 NumPy 子類別化的進階細節,特別是記憶體管理與下游相容性問題。進一步檢視 NumPy 如何實作 IEEE 754 浮點數標準以處理特殊值與數值例外,最後說明如何將 NumPy 陣列與低階語言(如 C、C++ 及 Fortran)介接。
學習成果:
- 透過
.base屬性管理記憶體參考,並避免自訂ndarray子類別中的「陷阱」。 - 透過正確實作
__array_wrap__與方法簽名,維持子類別的下游相容性。 - 識別與操控 IEEE 754 特殊值(NaN、Inf),並設定全域數值例外行為。
🔹 第 5 課:透過 C-API 擴充 NumPy
概覽: 本課探討透過與編譯語言(如 C、C++ 及 Fortran)介接來擴展 NumPy 功能的各種方法。內容包含自動化工具(如 f2py 與 Cython)、手動包裝(ctypes)、建立高性能通用函數(ufuncs),以及進階的 C-API 技巧,包括陣列迭代、自訂資料類型與子類別化 ndarray。
學習成果:
- 比較並實作將編譯程式碼與 Python 串接的不同方法(f2py、Cython、ctypes)。
- 建構並註冊自訂的 NumPy 通用函數(ufuncs),支援單一或多個資料類型,包含結構化陣列。
- 使用 NumPy C-API 進行高效陣列迭代、處理廣播,並定義使用者自訂資料類型或 ndarray 子類別。