人工智能之數據分析 numpy

第十四章 知識總結


(文章目錄)


前言

本文主要講解 NumPy 的核心知識點總結,涵蓋其作為 Python 科學計算基石的關鍵概念與最佳實踐,適合快速回顧、面試準備或系統學習。


🧱 一、基礎核心:ndarray(N 維數組)

  • 唯一數據結構:所有操作圍繞 numpy.ndarray 展開。
  • 關鍵屬性
    • .shape:維度大小(元組)
    • .dtype:元素數據類型(如 int32, float64, U10
    • .ndim:維度數量
    • .size:總元素個數
  • 內存連續:默認 C 風格(行優先),支持高效緩存訪問。
a = np.array([[1, 2], [3, 4]], dtype=np.float32)
print(a.shape, a.dtype)  # (2, 2) float32

🔢 二、數組創建

方法 用途
np.array() 從列表/元組創建
np.zeros(), np.ones() 全零/全一陣
np.empty() 未初始化數組(快)
np.arange() 等差整數序列(類似 range
np.linspace() 指定數量的等間距浮點數
np.eye() / np.identity() 單位矩陣
np.random.rand() 隨機數組

✅ 推薦顯式指定 dtype 避免隱式轉換。


📐 三、形狀操作(Shape Manipulation)

  • 重塑arr.reshape(new_shape)(返回視圖,若可能)
  • 展平arr.flatten()(副本) vs arr.ravel()(視圖優先)
  • 轉置arr.Tarr.transpose(axes)
  • 維度增減
    • 增:np.expand_dims(arr, axis)
    • 減:np.squeeze(arr)(移除長度為1的軸)
a = np.array([1, 2, 3])
b = a[:, np.newaxis]  # → shape (3, 1)

🔗 四、數組連接與分割

操作 函數
水平拼接 np.hstack() / np.concatenate(axis=1)
垂直拼接 np.vstack() / np.concatenate(axis=0)
深度拼接 np.dstack()
分割 np.split(), np.hsplit(), np.vsplit()

⚠️ 注意:concatenate 要求除拼接軸外其他維度一致。


🔄 五、廣播機制(Broadcasting)

規則(從後往前對齊):

  1. 維度相等,或
  2. 其中一個為 1,或
  3. 缺失維度(自動補 1)

✅ 示例:

  • (3,) + (2, 3)(2, 3)
  • (2, 1) + (3,)(2, 3)

❌ 失敗:

  • (2, 3) + (3, 2) → 最後一維 3≠2 且都不為1

🔑 廣播是向量化運算的核心,避免顯式循環!


➕ 六、數組運算

1. 算術運算(逐元素)

  • + - * / // % **
  • 支持標量、同形數組、廣播數組

2. 比較與邏輯

  • 比較:== != > < >= <= → 返回布爾數組
  • 邏輯:& | ~(用於布爾數組),np.logical_and/or/not

3. 位運算(整數)

  • & | ^ ~ << >> → 對應 np.bitwise_*

4. 通用函數(ufunc)

  • 向量化數學函數:np.sin, np.exp, np.sqrt, np.log
  • 累積:np.add.accumulate()
  • 歸約:np.add.reduce()

🧮 七、聚合與統計

函數 説明
np.sum(), np.mean(), np.std() 求和、均值、標準差
np.min(), np.max() 最值
np.argmin(), np.argmax() 返回索引
np.cumsum(), np.cumprod() 累積和/積
axis 參數 沿指定軸聚合(axis=0 列,axis=1 行)
arr = np.array([[1, 2], [3, 4]])
print(arr.sum(axis=0))  # [4 6]

🔍 八、排序與篩選

排序

  • np.sort(arr):返回排序副本
  • arr.sort():原地排序
  • np.argsort():返回排序索引

篩選(布爾索引)

arr = np.array([1, 2, 3, 4])
filtered = arr[arr > 2]  # [3 4]

# 多條件(注意括號!)
mask = (arr > 1) & (arr < 4)

條件選擇

  • np.where(condition, x, y):三元運算
  • np.select(), np.choose():多條件選擇

🧩 九、特殊數組類型

1. 結構化數組(Structured Arrays)

  • 異構字段:dtype=[('name', 'U10'), ('age', 'i4')]
  • 訪問:arr['name']

2. 記錄數組(Record Arrays)

  • 屬性訪問:arr.name(不推薦新項目使用)

3. 矩陣(Matrix)

  • 已棄用!統一用 ndarray + @ 運算符

🧮 十、線性代數(numpy.linalg

操作 函數
矩陣乘法 A @ Bnp.dot(A, B)
轉置 A.T
逆矩陣 np.linalg.inv(A)
行列式 np.linalg.det(A)
解方程 np.linalg.solve(A, b)
特徵值 np.linalg.eig(A)
SVD np.linalg.svd(A)
範數 np.linalg.norm(x)

✅ 優先用 solve 而非 inv(更穩定高效)


💾 十一、數據持久化

格式 函數 適用場景
.npy np.save() / np.load() 單數組,高效
.npz np.savez() / np.load() 多數組打包
文本 np.savetxt() / np.loadtxt() 小數據,可讀
內存映射 np.memmap 超大數組(>內存)
HDF5 h5py 科學大數據,跨平台

🖼️ 十二、與生態工具銜接

工具 關係
Matplotlib 直接繪圖 NumPy 數組
Pandas DataFrame.values 返回 ndarray
SciPy 基於 NumPy,提供高級算法
scikit-learn 輸入要求為 NumPy 數組
TensorFlow/PyTorch 張量 ↔ NumPy 數組互轉

🔄 十三、MATLAB → NumPy 關鍵差異

MATLAB NumPy
索引從 1 開始 索引從 0 開始
A * B 是矩陣乘 A @ B 是矩陣乘,A * B 是逐元素
end 表示末尾 -1
[A; B] 垂直拼接 np.vstack([A, B])
A(:) 展平 A.ravel()

⚙️ 十四、性能與最佳實踐

  • 避免 Python 循環:用向量化操作
  • 預分配數組np.zeros() 比動態 append 快
  • 使用視圖而非副本:切片、ravel() 默認返回視圖
  • 指定 dtype:避免不必要的類型提升
  • 大數組用內存映射np.memmap
  • 不要用 np.matrix
  • 慎用 np.matrixfrompyfunc

📚 總結:NumPy 核心思想

“Everything is an array.” —— 用統一的 N 維數組模型,通過向量化廣播ufunc 實現高性能數值計算。


📌 附:速查命令

import numpy as np

# 創建
a = np.arange(10).reshape(2,5)

# 運算
b = np.sin(a) + 2

# 篩選
c = b[b > 0]

# 聚合
mean_val = c.mean()

# 保存
np.save('result.npy', c)

後續

本文主要對numpy做一個總結。之前的python過渡項目部分代碼已經上傳至gitee,後續會逐步更新,主要受時間原因限制,當然自己也可以克隆到本地學習拓展。

資料關注

公眾號:咚咚王 gitee:https://gitee.com/wy18585051844/ai_learning

《Python編程:從入門到實踐》 《利用Python進行數據分析》 《算法導論中文第三版》 《概率論與數理統計(第四版) (盛驟) 》 《程序員的數學》 《線性代數應該這樣學第3版》 《微積分和數學分析引論》 《(西瓜書)周志華-機器學習》 《TensorFlow機器學習實戰指南》 《Sklearn與TensorFlow機器學習實用指南》 《模式識別(第四版)》 《深度學習 deep learning》伊恩·古德費洛著 花書 《Python深度學習第二版(中文版)【純文本】 (登封大數據 (Francois Choliet)) (Z-Library)》 《深入淺出神經網絡與深度學習+(邁克爾·尼爾森(Michael+Nielsen)》 《自然語言處理綜論 第2版》 《Natural-Language-Processing-with-PyTorch》 《計算機視覺-算法與應用(中文版)》 《Learning OpenCV 4》 《AIGC:智能創作時代》杜雨+&+張孜銘 《AIGC原理與實踐:零基礎學大語言模型、擴散模型和多模態模型》 《從零構建大語言模型(中文版)》 《實戰AI大模型》 《AI 3.0》