如何对RGB三通道权重矩阵实现秩K的SVD分解?
实现特定秩K的SVD截断分解
你已经完成了完整SVD分解,要得到特定秩K的近似结果,核心就是保留前K个最大的奇异值及其对应的奇异向量,再重构出低秩矩阵,具体操作如下:
核心步骤
- 从已得到的
u、s、v里挑出前K个关键分量:u_k:取u的前K列s_k:把s的前K个值转成K×K的对角矩阵v_k:取v的前K行
- 用这三个分量相乘,就能得到秩为K的近似权重矩阵
代码示例
import numpy as np # 假设已经通过np.linalg.svd得到了u, s, v # 设置你需要的目标秩K(K不能超过原矩阵的最小维度) K = 5 # 替换成实际需要的K值 # 提取前K个分量 u_k = u[:, :K] s_k = np.diag(s[:K]) v_k = v[:K, :] # 重构秩为K的近似权重矩阵 weight_k = u_k @ s_k @ v_k
注意点
- K的取值必须满足
1 ≤ K ≤ min(weight.shape[0], weight.shape[1]),不然会触发索引错误 - 如果原矩阵本身的秩就小于K,那截断后的结果和原矩阵完全一样,因为没有更多奇异值可以保留
- 你之前用了
full_matrices=False,所以u和v都是紧凑格式,直接截取就行,不用额外调整维度
内容的提问来源于stack exchange,提问作者Pranjal
相关产品推荐
相关产品推荐

