当前位置: 首页 > news >正文

Python与Matlab svd分解的差异

1.差异说明

Matlab和Python的NumPy库中的SVD函数(np.linalg.svd)都是用来对矩阵进行奇异值分解(SVD)的函数,但它们在默认参数和返回结果方面有一些差异。

在Matlab中,SVD函数的默认行为是计算矩阵的完整SVD,即对于一个m×nm \times nm×n的矩阵AAA,Matlab返回三个矩阵UUUSSSVVV,其中UUUVVV都是正交矩阵,SSS是一个大小为m×nm \times nm×n的矩阵,其非零元素(奇异值)按降序排列,并且在对角线上。这与NumPy中的默认行为略有不同。

在Python的NumPy中,np.linalg.svd函数的默认行为是计算矩阵的紧凑SVD,即对于一个m×nm \times nm×n的矩阵AAA,NumPy返回三个矩阵UUUSSSVTV^TVTVVV的转置),其中UUUVVV都是正交矩阵,SSS是一个大小为m×nm \times nm×n的矩阵,其非零元素(奇异值)按降序排列,并且在对角线上。请注意,NumPy返回的VVV与Matlab返回的VVV不同。

如果要在NumPy中获得完整的SVD,需要将参数full_matrices设置为True,这将导致NumPy返回与Matlab相同的三个矩阵UUUSSSVVV。但是请注意,这可能会导致存储开销很大,尤其是当mmmnnn中的一个很大时。

因此,要注意在使用SVD函数时要注意这些差异,并根据需要正确设置参数。

2.使用举例:

要想使得二者一致,在MATLAB中:

[U2, S2, V2] = svd(Rs);
%Rs=U2*S2*V2'

python中:

 U2, S2, V2 = np.linalg.svd(Rs, True)#注意一定要设置True这个参数

其中matlab的得到的V2与python得到的V2是转置关系。matlab得到的S2是对角阵,在python中S2写成了行向量。

参考资料:

1.https://blog.csdn.net/weixin_43917574/article/details/108193499
2.chatGPT

http://www.lryc.cn/news/9469.html

相关文章:

  • 2023年光模块行业发展趋势及未来前景
  • Sysmac Studio使用Tortoise和Git实现版本控制
  • Intent 和 Bundle 传值的区别
  • TypeScript 初步
  • leaflet 添加zoomslider,控制zoom放大缩小(074)
  • 10分钟学会python对接【OpenAI API篇】
  • 2023美赛必须注意事项
  • 基于微信小程序的智能招聘小程序
  • Java文件操作和I/O
  • QT项目_RPC(进程间通讯)
  • 移动硬盘文件丢失怎么恢复?
  • 什么是同步整流和异步整流
  • 关于PYTHON Enclosing 的一个小问题
  • LabVIEW错误-2147220623:最大内存块属性不存在
  • 图的总复习
  • 测试流程记录
  • Mysql主从架构与实例
  • webpack(高级)--Tapable
  • Python常见类型转换合集
  • 知识点(1)
  • Tomcat源码分析-启动分析(三) Catalina启动
  • 程序员必备的软技能-金字塔原理拆解
  • 基金详细介绍
  • 媒体邀约之企业如何加强品牌的宣传力度
  • 【SpringBoot】75、SpringBoot中使用spring-retry轻松解决重试
  • 网络工程师必知的几个问题
  • 【仓库管理】搭建 Maven 私服之一--Nexus仓库(Repository)管理软件
  • 凹凸贴图(Bump Mapping)
  • 文华财经期货指标公式量化策略分析软件,多空共振信号准确率高的公式源码
  • 基于TCP协议的文件传输系统