NumPy基礎:線性代數
阿新 • • 發佈:2018-11-27
線性代數,比如矩陣乘法、分解、行列式等方陣數學,是所有陣列類庫的重要組成部分。和Matlab等其他語言相比,NumPy的線性代數中所不同的是*是矩陣的逐元素乘積,而不是矩陣的點乘積。因此NumPy的陣列方法和numpy名稱空間中都有一個函式dot,用於矩陣的操作:
import numpy as np x = np.array([[1,2,3],[4,5,6]]) y = np.array([[6,23],[-1,7],[8,9]]) print(x) ----------------------------------- [[1 2 3] [4 5 6]] print(y) ----------------------------------- [[ 6 23] [-1 7] [ 8 9]] print(x.dot(y)) ----------------------------------- [[ 28 64] [ 67 181]] print(np.dot(x,y)) ----------------------------------- [[ 28 64] [ 67 181]]
二維陣列和一個長度合適的一維陣列之間的矩陣乘積,其結果是一個一維陣列:
x = np.array([[1,2,3],[4,5,6]])
print(np.dot(x,np.ones(3))) #[ 6. 15.]
特殊符號@也作為中綴操作符,用於點乘矩陣操作:
x = np.array([[1,2,3],[4,5,6]])
print(x @ np.ones(3)) #[ 6. 15.]
numpy.linalg擁有一個矩陣分解的標準函式庫,以及其他常用函式,例如求逆矩陣和行列式求解。這些函式都是通過在MATLAB和R等其他語言使用的相同的行業標準線性代數庫來實現的:
from numpy.linalg import inv,qr X = np.random.randn(5,5) mat = X.T.dot(X) print(inv(mat)) -------------------------------------------------------------- [[ 0.99280802 -1.66497271 1.08709676 -1.20419207 -0.58009393] [-1.66497271 4.78539379 -1.21698048 2.36701733 0.70531335] [ 1.08709676 -1.21698048 2.14800734 -1.45941075 -0.7995963 ] [-1.20419207 2.36701733 -1.45941075 2.18687936 0.50661344] [-0.58009393 0.70531335 -0.7995963 0.50661344 0.69783058]] print(mat.dot(inv(mat))) -------------------------------------------------------------- [[ 1.00000000e+00 -8.88178420e-16 -1.33226763e-15 -4.44089210e-16 -8.88178420e-16] [ 4.99600361e-16 1.00000000e+00 -5.55111512e-17 -1.31838984e-16 -2.84494650e-16] [-6.66133815e-16 -4.44089210e-16 1.00000000e+00 5.55111512e-16 1.11022302e-16] [-1.11022302e-16 -1.11022302e-16 0.00000000e+00 1.00000000e+00 -2.22044605e-16] [ 0.00000000e+00 0.00000000e+00 -8.88178420e-16 -2.22044605e-16 1.00000000e+00]] q,r = qr(mat) print(r) -------------------------------------------------------------- [[-9.07819827 -1.35065084 1.06323035 -1.98403118 -3.98283901] [ 0. -1.00460996 1.77481117 2.10840989 2.02836511] [ 0. 0. -1.19898847 -0.31205201 -1.73252293] [ 0. 0. 0. -0.58111008 1.3096621 ] [ 0. 0. 0. 0. 0.67161684]]
常用numpy.linalg函式圖表:
函式 | 描述 |
---|---|
diag | 將一個方陣的對角(或非對角)元素作為一維陣列返回,或者將一維陣列轉換成一個方陣,並且在非對角線上有零點 |
dot | 矩陣點乘 |
trace | 計算對角元素和 |
det | 計算矩陣的行列式 |
eig | 計算方陣的特徵值和特徵向量 |
inv | 計算方陣的逆矩陣 |
qr | 計算QR分解 |
solve | 求解x的線性系統Ax=b,其中A為方陣 |
lstsq | 計算Ax = b的最小二乘解 |