SVD 奇异值分解
SVD 是一种矩阵分解和降维的算法,通过分解矩阵找到奇异值,奇异值越大代表特征越重要。公式如下
A = U Σ V T A = U \Sigma V^T A=UΣVT
- U : 左矩阵 ( m × \times × m )
- Σ \Sigma Σ: 对角奇异值矩阵
- V:右矩阵( n × \times × n )
Sklearn 实现 SVD
import numpy as np
A = np.array([[0,1],[1,1],[1,0]])
u, s, vt = np.linalg.svd(A, full_matrices=True)
print(u.shape, s.shape, vt.shape)

SVD 可以用于图片的压缩,只保留最重要信息,从 k=1 到 k=50:
import numpy as np
import os
from PIL import Image
from tqdm import tqdm# 定义恢复函数,由分解后的矩阵恢复到原矩阵
def restore(u, s, v, K): '''u:左奇异矩阵v:右奇异矩阵s:奇异值矩阵K:奇异值个数'''m, n = len(u), len(v[0])a = np.zeros((m, n))for k in range(K):uk = u[:, k].reshape(m, 1)vk = v[k].reshape(1, n)# 前k个奇异值的加总a += s[k] * np.dot(uk, vk) a = a.clip(0, 255)return np.rint(a).astype('uint8')A = np.array(Image.open("./mountain.png", 'r'))
# 对RGB图像进行奇异值分解
u_r, s_r, v_r = np.linalg.svd(A[:, :, 0])
u_g, s_g, v_g = np.linalg.svd(A[:, :, 1])
u_b, s_b, v_b = np.linalg.svd(A[:, :, 2])# 使用前50个奇异值
K = 50
output_path = './svd_pic'
#
for k in tqdm(range(1, K+1)):R = restore(u_r, s_r, v_r, k)G = restore(u_g, s_g, v_g, k)B = restore(u_b, s_b, v_b, k)I = np.stack((R, G, B), axis=2) Image.fromarray(I).save('%s/svd_%d.jpg' % (output_path, k))
显示图片
from PIL import Image
from IPython.display import display, HTML
import os
import re
import time# Path to the folder containing images
image_folder = "./svd_pic"# List all image files
image_files = [f for f in os.listdir(image_folder) if f.endswith(('.png', '.jpg', '.jpeg'))]# Sort image files by the numeric part of the filename
def extract_number(filename):match = re.search(r'_(\d+)\.', filename)return int(match.group(1)) if match else float('inf')image_files = sorted(image_files, key=extract_number)# Generate HTML for horizontal display with cache busting
html = "<div style='display: flex; flex-direction: row; flex-wrap: wrap;'>"
timestamp = int(time.time()) # Use current timestamp for cache bustingfor idx, image_file in enumerate(image_files):img_path = os.path.join(image_folder, image_file)# Add a unique query parameter to disable cachingimg_url = f"{img_path}?v={timestamp}"img = Image.open(img_path)img_resized = img.resize((150, 150)) # Resize to 300x300img_resized.save("temp_resized.jpg") # Save resized image temporarily# Add image with index number overlayhtml += f"""<div style="margin: 10px; position: relative; display: inline-block; text-align: center;"><img src="{img_url}" style="width: 150px; height: 150px; display: block;"><div style="position: absolute; top: 10px; left: 10px; background-color: rgba(0, 0, 0, 0.6); color: white; padding: 5px 10px; font-size: 16px; border-radius: 5px;">{idx + 1}</div></div>"""html += "</div>"# Display the images horizontally with no cache
display(HTML(html))
随着K 值增大,图片会越来越清晰。

总结
SVD 算法通过求解奇异值对矩阵进行分解,较大奇异值能表达更重要的信息。
相关文章:
SVD 奇异值分解
SVD 是一种矩阵分解和降维的算法,通过分解矩阵找到奇异值,奇异值越大代表特征越重要。公式如下 A U Σ V T A U \Sigma V^T AUΣVT U : 左矩阵 ( m \times m ) Σ \Sigma Σ: 对角奇异值矩阵V:右矩阵( n \times n ) Sklearn 实现 S…...
C++设计模式-享元模式
动机(Motivation) 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作…...
AI加持,华为全屋智能品牌升级为“鸿蒙智家”
1.传统智能家居的困境:从便利到繁琐 近年来,智能家居因其便捷性和科技感受到消费者的青睐。然而,随着用户需求的多样化,传统智能家居的弊端逐渐显现: 设备连接复杂,品牌间兼容性不足,用户不得不…...
洛谷刷题之p1631
序列合并 题目入口 题目描述 有两个长度为 N N N 的单调不降序列 A , B A,B A,B,在 A , B A,B A,B 中各取一个数相加可以得到 N 2 N^2 N2 个和,求这 N 2 N^2 N2 个和中最小的 N N N 个。 输入格式 第一行一个正整数 N N N; 第二…...
uniapp前端开发,基于vue3,element plus组件库,以及axios通讯
简介 UniApp 是一个基于 Vue.js 的跨平台开发框架,旨在通过一次开发、编译后运行在多个平台上,如 iOS、Android、H5、以及小程序(微信小程序、支付宝小程序、百度小程序等)等。UniApp 为开发者提供了统一的开发体验,使…...
在Unity中实现物体动画的完整流程
在Unity中,动画是游戏开发中不可或缺的一部分。无论是2D还是3D游戏,动画都能为游戏增添生动的视觉效果。本文将详细介绍如何在Unity中为物体添加动画,包括资源的准备、播放组件的添加、动画控制器的创建以及动画片段的制作与调度。 1. 准备动…...
【云计算网络安全】解析 Amazon 安全服务:构建纵深防御设计最佳实践
文章目录 一、前言二、什么是“纵深安全防御”?三、为什么有必要采用纵深安全防御策略?四、以亚马逊云科技为案例了解纵深安全防御策略设计4.1 原始设计缺少安全策略4.2 外界围栏构建安全边界4.3 访问层安全设计4.4 实例层安全设计4.5 数据层安全设计4.6…...
【Andriod ADB基本命令总结】
笔者工作当中遇到安卓机器的数据访问和上传,特来简单总结一下常用命令。 1、ADB命令简介与安装 简介: ADB (Android Debug Bridge) 是一个强大的命令行工具,用于与 Android 设备进行交互,常用于开发、调试、测试以及设备管理等操作。它是 Android 开发工具包(SDK)的一部…...
ChatGPT如何辅助academic writing?
今天想和大家分享一篇来自《Nature》杂志的文章《Three ways ChatGPT helps me in my academic writing》,如果您的日常涉及到学术论文的写作(writing)、编辑(editing)或者审稿( peer review)&a…...
Day 27 贪心算法 part01
贪心算法其实就是没有什么规律可言,所以大家了解贪心算法 就了解它没有规律的本质就够了。 不用花心思去研究其规律, 没有思路就立刻看题解。 基本贪心的题目 有两个极端,要不就是特简单,要不就是死活想不出来。 学完贪心之后再去看动态规划,就会了解贪心和动规的区别。…...
使用Python实现目标追踪算法
引言 目标追踪是计算机视觉领域的一个重要任务,广泛应用于视频监控、自动驾驶、机器人导航、运动分析等多个领域。目标追踪的目标是在连续的视频帧中定位和跟踪感兴趣的物体。本文将详细介绍如何使用Python和OpenCV实现一个基本的目标追踪算法,并通过一…...
某科技研发公司培训开发体系设计项目成功案例纪实
某科技研发公司培训开发体系设计项目成功案例纪实 ——建立分层分类的培训体系,加强培训跟踪考核,促进培训成果实现 【客户行业】科技研发行业 【问题类型】培训开发体系 【客户背景】 某智能科技研发公司是一家专注于智能科技、计算机软件技术开发与…...
如何通过高效的缓存策略无缝加速湖仓查询
引言 本文将探讨如何利用开源项目 StarRocks 的缓存策略来加速湖仓查询,为企业提供更快速、更灵活的数据分析能力。作为 StarRocks 社区的主要贡献者和商业化公司,镜舟科技深度参与 StarRocks 项目开发,也为企业着手构建湖仓架构提供更多参考…...
Linux V4L2框架介绍
linux V4L2框架介绍 V4L2框架介绍 V4L2,全称Video for Linux 2,是Linux操作系统下用于视频数据采集设备的驱动框。它提供了一种标准化的方式使用户空间程序能够与视频设备进行通信和交互。通过V4L2接口,用户可以方便地实现视频图像数据的采…...
【前端】JavaScript 中 arguments、类数组与数组的深入解析
博客主页: [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: 前端 文章目录 💯前言💯什么是 arguments 对象2.1 arguments 的定义2.2 arguments 的特性2.3 使用场景 💯深入了解 arguments 的结构3.1 arguments 的内部结构arguments 的关键属性…...
Android 布局菜单或按钮图标或Menu/Item设置可见和不可见
设置可见和不可见 即 设置 显示和隐藏;是双向设置;什么情况显示,什么情况隐藏分判断的条件 它不同于删除和屏蔽,删除和屏蔽,覆盖是单向的,不可逆转的。它间接等于单向的隐藏!!&…...
|| 与 ??的区别
?? : 空值合并运算符, 用于在左侧操作数为 null 或 undefined 时返回右侧操作数 let name null // null 或者 undefinedlet defaultName defaultNamelet displayName name ?? defaultNameconsole.log(displayName) // defaultName || : 逻辑或,…...
wordpress获取文章总数、分类总数、tag总数等
在制作wordpress模板的时候会要调用网站的文章总数分类总数tag总数等这个数值,如果直接用count查询数据库那就太过分了。好在wordpress内置了一些标签可以直接获取到这些数值,本文整理了一些常用的wordpress网站总数标签。 文章总数 <?php $count_…...
pytest 通过实例讲清单元测试、集成测试、测试覆盖率
1. 单元测试 概念 定义: 单元测试是对代码中最小功能单元的测试,通常是函数或类的方法。目标: 验证单个功能是否按照预期工作,而不依赖其他模块或外部资源。特点: 快速、独立,通常是开发者最先编写的测试。 示例:pytest 实现单…...
C#里怎么样自己实现10进制转换为二进制?
C#里怎么样自己实现10进制转换为二进制? 很多情况下,我们都是采用C#里类库来格式化输出二进制数。 如果有人要你自己手写一个10进制数转换为二进制数,并格式化输出, 就可以采用本文里的方法。 这里采用求模和除法来实现的。 下…...
从模拟到洞察:多Cache一致性算法(监听法与目录法)实战解析
1. 多Cache一致性问题的本质 想象一下办公室里几个同事共用一个共享文档的场景。当所有人都只是查看文档时,不会出现问题。但如果有人开始修改文档,而其他人不知道这个修改,就会导致大家看到的文档版本不一致。计算机中的多Cache一致性问题和…...
FFmpeg实战:如何用faststart和empty_moov优化MP4视频流媒体播放
FFmpeg实战:如何用faststart和empty_moov优化MP4视频流媒体播放 在视频流媒体服务中,MP4文件的播放体验往往取决于一个关键因素——moov box的位置。想象一下,当用户点击播放按钮时,是立即看到画面还是等待漫长的缓冲?…...
PyTorch DDP训练卡死?NCCL通信失败的3个常见坑及解决方案
PyTorch DDP训练卡死?深入剖析NCCL通信失败的底层逻辑与实战排障 最近在几个大规模模型训练项目中,团队频繁遭遇一个令人头疼的问题:训练过程毫无征兆地卡住,日志停止输出,GPU利用率跌至谷底,等待许久后最终…...
RVC开源项目深度解析:检索式语音转换原理与WebUI架构
RVC开源项目深度解析:检索式语音转换原理与WebUI架构 1. 引言:从AI翻唱到语音克隆,RVC带来了什么? 你可能在社交媒体上听过用AI“翻唱”的歌曲,或者见过一键变声的有趣视频。这些效果的背后,往往有一个共…...
Dying Gasp IC 详解:定义、功能、选型参数与应用场景
引言在通信设备(如 GPON ONU、xDSL Modem、工业网关)的实际应用中,突然掉电可能导致设备状态丢失、网管无法定位故障等问题。Dying Gasp(临终之息)技术正是为解决这一痛点而生,而Dying Gasp IC作为该技术的…...
RS®CMW500 全场景一体化无线通信测试平台
看来你对罗德与施瓦茨的专业无线测试设备很熟悉,CMW500作为该品牌经典的宽带无线通信综合测试仪,确实是2G到4G时代无线终端测试领域的标杆产品,至今在消费电子、汽车电子、物联网等行业的研发、生产和认证环节仍有广泛应用。我会从核心定位、…...
USB 2.0四口拓展坞硬件设计详解(基于SL2.1A)
1. 项目概述USB拓展坞(刺客伍六七版)是一款面向消费级桌面场景的Type-C多端口扩展设备,其核心目标是将单路USB Type-C上行链路无损复用为四路独立、可并发工作的USB 2.0下行接口。该设计并非简单信号分路,而是基于专用USB集线器控…...
STC32G八面玲珑开发板:全IO引出+多模态显示的8051进阶平台
1. 项目概述STC32八面玲珑开发板是一款面向嵌入式学习与快速原型验证的通用型MCU开发平台,核心控制器采用宏晶科技(STC)推出的STC32G系列高性能8051内核单片机。该开发板并非简单复刻传统51开发板形态,而是在继承经典8051易用性与…...
Kimi-VL-A3B-Thinking图文理解精度保障:视觉编码器MoonViT原生分辨率优势解析
Kimi-VL-A3B-Thinking图文理解精度保障:视觉编码器MoonViT原生分辨率优势解析 1. 模型概述与技术亮点 Kimi-VL-A3B-Thinking是一款高效的开源混合专家(MoE)视觉语言模型,在多模态推理领域展现出卓越性能。该模型的核心创新在于其…...
联想人工智能岗面试题精选:10道高频考题+答案解析(附PDF)
联想简介 联想是全球领先的智能设备和服务提供商,业务涵盖PC、服务器、存储、网络设备等硬件产品,以及云计算、人工智能、物联网等前沿技术领域。在人工智能方向,联想聚焦边缘计算、计算机视觉、自然语言处理等技术研发,致力于将AI能力融入硬件产品和行业解决方案。面试风…...
