numpy做奇异值分解

奇异值分解

有一个矩阵M, 可以分解为3个矩阵U S V, 使得UxSxV等于M. U与V都是正交矩阵(乘以自身的转置矩阵结果为单位矩阵). 那么S矩阵主对角线上的元素称为矩阵M的奇异值, 其他元素都为0.

# 奇异值分解  U与V都是正交矩阵
# s: 奇异值数组
U, s, V = np.linalg.svd(M)
# 逆向推导原矩阵:
S = U * np.diag(s) * V

案例: 读取图片亮度矩阵,提取奇异值.保留部分奇异值,重新生成图片.

"""
奇异值分解
"""
import numpy as np
import scipy.misc as sm
import matplotlib.pyplot as mp

image = sm.imread('../da_data/lily.jpg', True)
print(type(image), image.shape)

# 提取image矩阵的特征值与特征向量
eigvals, eigvecs = np.linalg.eig(image)
# 抹掉一部分特征值 重新生成新的图片
print(eigvals.shape)
eigvals[100:] = 0
S = np.mat(eigvecs) * \
	np.mat(np.diag(eigvals)) * \
	np.mat(eigvecs).I
S = S.real

# 奇异值分解 
U, s, V = np.linalg.svd(image)
S2 = np.mat(U)*np.mat(np.diag(s))*np.mat(V)
# 保留部分奇异值  生成图片
s[100:] = 0
S3 = np.mat(U)*np.mat(np.diag(s))*np.mat(V)

mp.figure('Lily Features',facecolor='lightgray')
mp.subplot(2,2,1)
mp.xticks([])
mp.yticks([])
mp.imshow(image, cmap='gray')
mp.subplot(2,2,2)
mp.xticks([])
mp.yticks([])
mp.imshow(S, cmap='gray')
mp.subplot(2,2,3)
mp.xticks([])
mp.yticks([])
mp.imshow(S2, cmap='gray')
mp.subplot(2,2,4)
mp.xticks([])
mp.yticks([])
mp.imshow(S3, cmap='gray')
mp.tight_layout()
mp.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值