SVD
是一種因子分解運算, 將一個矩陣分解為3個矩陣的乘積
其中, 奇異值矩陣是對角線矩陣
Key_Function
np.linalg.svd函數, 可以對矩陣進行奇異值分解.
U: 正交矩陣
sigma: 表示奇異值矩陣對角線的數組, 其他非對角線元素均為0
V: 正交矩陣
np.diag函數, 得出完整的奇異值矩陣
Code
import numpy as np A = np.mat("4 11 14; 8 7 -2") print(A) ''' [[ 4 11 14] [ 8 7 -2]] ''' U, Sigma, V = np.linalg.svd(A, full_matrices=False) print(U) ''' [[-0.9486833 -0.31622777] [-0.31622777 0.9486833 ]] ''' print(Sigma) # 這個Sigma只是奇異值矩陣對角線上的值 ''' [ 18.97366596 9.48683298] ''' print(np.diag(Sigma)) ''' [[ 18.97366596 0. ] [ 0. 9.48683298]] ''' print(V) ''' [[-0.33333333 -0.66666667 -0.66666667] [ 0.66666667 0.33333333 -0.66666667]] ''' print(U * np.diag(Sigma) * V) ''' [[ 4. 11. 14.] [ 8. 7. -2.]] '''
廣義逆矩陣
Key_Function
np.linalg.pinv函數
np.inv函數
Code
import numpy as np A = np.mat("4 11 14; 8 7 -2") print(A) ''' [[ 4 11 14] [ 8 7 -2]] ''' pseudoinv = np.linalg.pinv(A) print(pseudoinv) ''' [[-0.00555556 0.07222222] [ 0.02222222 0.04444444] [ 0.05555556 -0.05555556]] ''' print(A * pseudoinv) '''十分接近單位矩陣 [[ 1.00000000e+00 0.00000000e+00] [ 8.32667268e-17 1.00000000e+00]] '''
數學概念
廣義逆矩陣的定義
或者
廣義逆矩陣的求解
行列式
Key_Function
np.linalg.det函數, 計算矩陣的行列式
Code
import numpy as np A = np.mat("3 4; 5 6") print(A) ''' [[3 4] [5 6]] ''' print(np.linalg.det(A)) # -2.0