📚 常用?np.linalg
?函數一覽
下面是一些最常用的功能和示例:
1.?np.linalg.norm()
?—— 計算向量或矩陣的范數
python
深色版本
import numpy as npv = np.array([3, 4])
print(np.linalg.norm(v)) # L2 范數(模長): √(32+42) = 5.0A = np.array([[1, 2], [3, 4]])
print(np.linalg.norm(A)) # 矩陣Frobenius范數
常用于:計算距離、正則化、歸一化。
2.?np.linalg.inv()
?—— 求矩陣的逆
python
深色版本
A = np.array([[1, 2],[3, 4]])A_inv = np.linalg.inv(A)
print(A_inv)
# 輸出:
# [[-2. 1. ]
# [ 1.5 -0.5]]
?? 注意:只能對方陣且可逆的矩陣使用。
3.?np.linalg.det()
?—— 計算矩陣的行列式
python
深色版本
A = np.array([[1, 2],[3, 4]])
print(np.linalg.det(A)) # 輸出: -2.0
4.?np.linalg.eig()
?—— 求矩陣的特征值和特征向量
python
深色版本
A = np.array([[4, 1],[2, 3]])eigenvalues, eigenvectors = np.linalg.eig(A)
print("特征值:", eigenvalues)
print("特征向量:\n", eigenvectors)
5.?np.linalg.solve()
?—— 解線性方程組?Ax=bAx=b
python
深色版本
A = np.array([[3, 1],[1, 2]])
b = np.array([9, 8])x = np.linalg.solve(A, b)
print(x) # 輸出: [2. 3.] → 表示 x=2, y=3
? 這比手動求逆更快更穩定:不要用 np.linalg.inv(A) @ b
,優先用 solve
。
6.?np.linalg.svd()
?—— 奇異值分解(SVD)
python
深色版本
A = np.array([[1, 2],[3, 4],[5, 6]])U, S, Vt = np.linalg.svd(A)
print("U:", U.shape) # (3, 3)
print("S:", S.shape) # (2,)
print("Vt:", Vt.shape) # (2, 2)
📌 應用:PCA、降維、推薦系統、圖像壓縮等。
7.?np.linalg.matrix_rank()
?—— 求矩陣的秩
python
深色版本
A = np.array([[1, 2],[2, 4]]) # 第二行是第一行的倍數print(np.linalg.matrix_rank(A)) # 輸出: 1
8.?np.linalg.cholesky()
?—— 楚列斯基分解(Cholesky)
適用于對稱正定矩陣:
python
深色版本
A = np.array([[4, 12, -16],[12, 37, -43],[-16, -43, 98]])L = np.linalg.cholesky(A)
print(L @ L.T) # 應該等于 A
? 小貼士:什么時候用?np.linalg
?
場景 | 推薦函數 |
---|---|
向量長度 / 歸一化 | np.linalg.norm() |
解方程?Ax=bAx=b | np.linalg.solve() |
矩陣求逆 | np.linalg.inv() (慎用) |
特征分析 | np.linalg.eig() |
降維 / 數據壓縮 | np.linalg.svd() |
判斷是否滿秩 | np.linalg.matrix_rank() |
?? 注意事項
- 所有輸入都應為?
numpy.ndarray
?或能轉換成數組的對象。 - 如果矩陣不可逆或接近奇異,
np.linalg.inv()
?會報錯或結果不穩定。 - 大多數函數都支持批量操作(如形狀為?
(N, M, M)
?的數組)。
? 總結
np.linalg
是你進行矩陣運算的瑞士軍刀,掌握它就掌握了:
- 線性方程求解
- 矩陣分解
- 范數與距離
- 特征分析
- 數值穩定性處理
🔁 記住口訣:
“要求逆?用 linalg!要解方程?用 solve!要降維?用 svd!”