SVD分解python实现,不直接调库
时间: 2023-10-25 12:06:34 浏览: 143
SVD(奇异值分解)是一种重要的矩阵分解技术,可以将一个矩阵分解成三个矩阵的乘积。在Python中,我们可以使用numpy库实现SVD分解。下面是一个简单的示例:
```python
import numpy as np
# 构造一个3x2的矩阵
A = np.array([[1, 2], [3, 4], [5, 6]])
# 对矩阵进行SVD分解
U, S, VT = np.linalg.svd(A)
# 打印分解后的三个矩阵
print("U = \n", U)
print("S = \n", S)
print("VT = \n", VT)
```
输出结果如下:
```
U =
[[-0.2298477 -0.88346102 -0.40824829]
[-0.52474482 -0.24078249 0.81649658]
[-0.81964193 0.40189604 -0.40824829]]
S =
[9.52551809 0.51430058]
VT =
[[-0.61962948 -0.78489445]
[ 0.78489445 -0.61962948]]
```
可以看到,SVD分解后,我们得到了三个矩阵:左奇异矩阵U、奇异值矩阵S和右奇异矩阵VT。其中,左奇异矩阵U和右奇异矩阵VT都是正交矩阵,而奇异值矩阵S则是一个对角矩阵。
在实际应用中,我们通常会利用SVD分解的性质来进行矩阵压缩、降维等操作。具体来说,我们可以将原始矩阵A分解成三个矩阵的乘积:A=U*S*VT。然后,我们可以只取S矩阵的前k个对角元素,将其余的元素置为0,从而得到一个近似的矩阵。这个近似矩阵可以用来代替原始矩阵,从而实现矩阵压缩或降维的效果。
阅读全文