返回課程
AI018 Professional

NumPy 使用者指南

一份全面的入門概覽與技術指南,介紹 NumPy 的安裝、陣列操作、索引、廣播功能,以及與 C/C++ 的整合。

4.9
15.0h
891 學習者
0 讚好
人工智能
開始學習

課程總覽

📚 內容摘要

一份全面的入門概述與技術指南,涵蓋 NumPy 的安裝、陣列操作、索引、廣播機制,以及與 C/C++ 的整合。

透過官方 NumPy 指南,掌握科學計算在 Python 中的基礎。

作者: NumPy 社群

致謝: 由 NumPy 社群撰寫

🎯 學習目標

  1. 定義 NumPy 並識別其在科學計算型 Python 生態系統中的角色。
  2. 解釋為何 NumPy 比標準 Python 迴圈快得多,並運用「向量化」的概念說明。
  3. 執行各種環境(包括 Pip、Conda 及 Raspberry Pi)的安裝指令。
  4. 識別並解讀核心 ndarray 屬性,如 ndimshapedtype
  5. 使用 linspacereshapevstackhstack 等函數執行陣列建立與操作。
  6. 對數值資料集應用元素級運算、通用函數(ufuncs)及線性代數求解器。
  7. 利用 NumPy 的標量類型與資訊工具(iinfofinfo)管理資料精確度,並避免溢位錯誤。
  8. 使用 genfromtxt 以自訂分隔符、標頭與欄位選擇,靈活地從磁碟讀取資料。
  9. 應用通用廣播規則,預測並控制不同形狀陣列之間的互動。
  10. 管理記憶體參考,並透過 .base 屬性避免自訂 ndarray 子類別中的「陷阱」。

🔹 第 1 課:介紹與環境設定

概覽: 本課介紹 NumPy 作為 Python 科學計算的核心函式庫,解釋其透過向量化帶來的性能優勢。學生將學習如何在各平台(Windows、Raspberry Pi、Conda、PyCharm)安裝該函式庫,並解決常見的安裝障礙,例如透過管理環境變數與系統依賴來排除 ImportError

學習成果:

  • 定義 NumPy 並識別其在科學計算型 Python 生態系統中的角色。
  • 解釋為何 NumPy 比標準 Python 迴圈快得多,並運用「向量化」的概念說明。
  • 執行各種環境(包括 Pip、Conda 及 Raspberry Pi)的安裝指令。

🔹 第 2 課:核心基礎與陣列操作

概覽: 本課深入介紹 NumPy 的 ndarray 物件,涵蓋其核心屬性、建立方法與基本數學運算。內容延伸至進階主題,包括高級索引(布林與整數索引)、形狀變換,以及重要的線性代數常式。完成此模組後,學習者將能有效儲存、轉換與分析多維資料結構。

學習成果:

  • 識別並解讀核心 ndarray 屬性,如 ndimshapedtype
  • 使用 linspacereshapevstackhstack 等函數執行陣列建立與操作。
  • 對數值資料集應用元素級運算、通用函數(ufuncs)及線性代數求解器。

🔹 第 3 課:進階資料處理與廣播

概覽: 本課探討 NumPy 的進階機制,專注於精確的資料類型管理、溢位處理,以及使用 genfromtxt 進行複雜的 I/O 操作。學生將掌握廣播機制在算術運算中的內部邏輯,記憶體層級的字節順序細節,以及針對異質資料集建立結構化/記錄陣列的方法。最後部分詳細說明透過自訂陣列容器擴展 NumPy,以及子類別化 ndarray 所需的正式協定。

學習成果:

  • 利用 NumPy 的標量類型與資訊工具(iinfofinfo)管理資料精確度,並避免溢位錯誤。
  • 使用 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 子類別。