给定一个灰度图像矩阵,大小为 m×n,以及一个整数 k,要求对该矩阵进行奇异值分解(SVD),仅使用前 k 个奇异值和对应的奇异向量重构出一个近似的低秩矩阵,并输出重构后矩阵的每个元素,保留两位小数。
在一家致力于图像处理的科技公司,你被分配到一个新项目,目标是开发一种图像压缩算法,以减少存储空间并加速传输。团队决定使用奇异值分解 (SVD) 对图像进行降维处理,以达到压缩的目的。
现在,你需要编写一个程序,对给定的灰度图像矩阵进行奇导值分解,并重构出近似的低秩矩阵。
请你帮助团队实现一个程序,使用 NumPy 库对给定的矩阵进行奇异值分解,共利用前 (k) 个奇异值重构矩阵。具体要求如下:
1.读取输入矩阵,为一个二维列表,表示灰度图像的像素值矩阵。
2.读取整数 (k) ,表示使用前 (k) 个奇异值进行矩阵重构。
3.对矩阵进行奇异值分解(SVD),获取左奇异矩阵 (U)、奇异值对角矩阵 (∑) 和右奇异矩阵 (VT)
4.利用前 (k) 个奇异值和对应的奇异向量重构矩阵
5.输出重构后的矩阵,每个元素保留两位小数 (使用 round(x,2))
第一行包含两个整数 (m) 和 (n) 表示矩阵的行数和列数。
接下来的 (m) 行,每行包含 (n) 个整数,表示矩阵的元素,元素之间用空格分隔。
最后一行包含一个整数 (k) ,表示用前 (k) 个奇异值进行矩阵重构。
输出 (m) 行,每行包含 (n) 个浮点数,表示重构后的矩阵元素,元素之间用空格分隔,结里均保留两位小数,使用 round(x,2)
A=U∑VT
其中:
(U) 是 (m×m) 的正交矩阵,其列为 (AAT) 的特征向量。
(∑) 是 (m×n) 的对角矩阵,对角线上为非负的奇异值,按降序排列。
(VT) 是 (n×n) 的正交矩阵的转置,其列为 (ATA) 的特征向量。
矩阵重构
使用前 (k) 个奇异值和对应的奇异向量,可以近似地重构原矩阵:
Ak=Uk∑kVkT
其中:
(Uk) 为 (U) 的前 (k) 列。
(∑k) 为 (∑) 中前 (k) 个奇异值构成的对角矩阵。
(VkT) 为 (VT) 的前 k 行。
输入
4 5
52 55 61 66 70
63 59 55 90 109
85 104 117 123 119
105 122 145 160 159
2
输出
47.3 54.1 61.41 69.2 70.35
63,02 58.35 55.4 90.03 109.11
84.08 101.15 118.72 123.8 119.52
107.77 125.0 143.24 157.95 158.38