在數據科學、人工智能和科學計算的世界里,NumPy 是一塊繞不過去的基石。它是 Python 語言中用于高性能科學計算的基礎包,幾乎所有的數據分析與機器學習框架(如 Pandas、TensorFlow、Scikit-learn)都離不開它的支持。
一、什么是 NumPy?
NumPy(Numerical Python)是一個開源的 Python 庫,主要用于支持大型多維數組與矩陣運算,同時提供了大量的數學函數庫用于對這些數組進行操作。其核心數據結構是 ndarray,一個多維數組對象。
NumPy 的優勢:
-
更高效的數據存儲與計算性能
-
支持廣播(broadcasting)機制
-
豐富的線性代數、傅里葉變換與隨機數生成工具
-
與 C、C++ 和 Fortran 的接口優秀,支持底層擴展
二、NumPy 安裝
安裝 NumPy 最簡單的方法是使用 pip 或 conda:
pip install numpy
# 或者使用 Anaconda
conda install numpy
安裝完成后可以這樣導入:
import numpy as np
三、NumPy 核心數據結構:ndarray
1. 創建 ndarray
import numpy as npa = np.array([1, 2, 3]) # 一維數組
b = np.array([[1, 2], [3, 4]]) # 二維數組
c = np.zeros((2, 3)) # 全 0 數組
d = np.ones((2, 3)) # 全 1 數組
e = np.eye(3) # 單位矩陣
f = np.arange(0, 10, 2) # 生成等差序列
g = np.linspace(0, 1, 5) # 生成等距分布的數
2. 數組屬性
print(a.shape) # 數組維度
print(a.ndim) # 維數
print(a.dtype) # 元素類型
print(a.size) # 元素個數
四、數組操作
1. 數組索引與切片
arr = np.array([[1, 2, 3], [4, 5, 6]])print(arr[0, 2]) # 獲取第一行第三列的元素
print(arr[:, 1]) # 獲取所有行的第二列
print(arr[1, :2]) # 獲取第二行的前兩列
2. 數組形狀變換
a = np.arange(6) # [0, 1, 2, 3, 4, 5]
a = a.reshape((2, 3)) # 轉換為 2 行 3 列
a.T # 轉置
a.flatten() # 展平成一維
3. 數組合并與拆分
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])# 合并
np.vstack((a, b)) # 豎直堆疊
np.hstack((a, a)) # 水平堆疊# 拆分
np.split(a, 2, axis=0) # 沿第 0 軸拆分
五、廣播機制(Broadcasting)
NumPy 可以讓不同形狀的數組在一起執行運算,前提是它們遵循廣播規則:
a = np.array([1, 2, 3])
b = 2
print(a + b) # 輸出:[3, 4, 5]A = np.ones((2, 3))
B = np.array([1, 2, 3])
print(A + B) # 每一行加上 [1, 2, 3]
六、常用函數
1. 數學函數
a = np.array([1, 2, 3])np.sqrt(a)
np.exp(a)
np.log(a)
np.sin(a)
2. 聚合函數
a = np.array([[1, 2], [3, 4]])np.sum(a)
np.mean(a)
np.std(a)
np.max(a, axis=0)
np.min(a, axis=1)
七、線性代數操作
NumPy 擁有強大的線性代數模塊:
from numpy.linalg import inv, det, eig, solveA = np.array([[1, 2], [3, 4]])inv(A) # 求逆
det(A) # 行列式
eig(A) # 特征值與特征向量
b = np.array([5, 6])
solve(A, b) # 解線性方程 Ax = b
八、隨機數生成
np.random.seed(0) # 設置隨機種子
np.random.rand(2, 3) # 均勻分布
np.random.randn(2, 3) # 正態分布
np.random.randint(0, 10, 5) # 整數
np.random.choice([1, 2, 3], size=4)
九、實際應用示例:矩陣回歸模型
# 簡單的線性回歸計算示例: y = Xβ
X = np.array([[1, 1], [1, 2], [1, 3]])
y = np.array([1, 2, 3])# 最小二乘解: β = (X.T X)^-1 X.T y
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print("線性回歸系數:", beta)
輸出:
線性回歸系數: [0. 1.]
這說明模型 y = x 完全擬合了數據。
十、總結
NumPy 是 Python 科學計算的基礎設施。熟練掌握 NumPy,能幫助你寫出更高效、更簡潔的數值計算代碼,也為深入學習 Pandas、Scikit-learn、TensorFlow 等框架打下堅實的基礎。
建議的學習路徑:
-
掌握 ndarray 的基本操作
-
學會廣播和向量化操作
-
理解數組運算的內存和性能特點
-
嘗試用 NumPy 完成簡單的數值計算任務