人工智能之數據分析 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()(副本) vsarr.ravel()(視圖優先) - 轉置:
arr.T或arr.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,或
- 缺失維度(自動補 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 @ B 或 np.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.matrix和frompyfunc
📚 總結: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》