numpy奇异值分解,广义逆矩阵与行列式

Posted draven123

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

以上是关于numpy奇异值分解,广义逆矩阵与行列式的主要内容,如果未能解决你的问题,请参考以下文章

奇异值分解之后如何进行最小二乘解算?

自适应滤波:奇异值分解SVD

矩阵SVD奇异值分解用于图像压缩

SVD奇异值分解

R语言矩阵运算

Python加速奇异值分解