奇异值分解(Singular Value Decomposition 简称SVD)是线性代数中的一种重要分解,在很多领域都有着广泛的应用。这篇文章将通过一个图像压缩的例子教你如何在Python中使用SVD实现数据压缩,并说明其原理。
奇异值分解压缩的原理
先看一个简单的例子,如果你想要在网络上给别人发送一段数据,数据的内容为
![6749fb215d012b30bd901cd1f462b902.png](https://i-blog.csdnimg.cn/blog_migrate/c285c68772e5840638ef8ae0ec1ccaca.png)
当然,最简单的方法就是给这个矩阵直接发过去,这是一个5x5的矩阵,你至少需要发送25个数字。
但是我们可以把这个矩阵分解为两个矩阵的乘积,这样只需要发送10个数字。
![063af4af2e82f470ddcc5161334326bf.png](https://i-blog.csdnimg.cn/blog_migrate/6d30e263b2f77843ceb63b0c12a6dc59.png)
图像也可以被视为矩阵,图像的每一个点都是由RGB值定义的,所以每个图像可以被表示为三个巨型矩阵(分别是R,G,B矩阵)。
但图像所生成的矩阵显然不会像上面的例子那样简单的就被分解了。想要分解任意矩阵,这就需要用到SVD了。
SVD分解可以被认为是EVD(Eigen Value Decomposition 特征值分解)的延伸。特征值分解将一个矩阵分解为两组