numpy奇異值分解,廣義逆矩陣與行列式


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM