基于python 和 matlab的矩阵奇异值分解

2023-11-03

https://www.cnblogs.com/pinard/p/6251584.html 可参考。 

一个 mxn的矩阵H可以分解为 U(mxm) ,S(mxn) , V(nxn) 三个矩阵的乘积,这就是奇异值分解。S是一个对角矩阵,一般从大到小排列,S的元素值称为奇异值。
Matlab和python均提供奇异值分解的函数:
Matlab:

>> a = [1,2,3,4;2,3,5,3;6,4,1,3]

a =
     1     2     3     4
     2     3     5     3
     6     4     1     3

>> [u,s,v] = svd(a)

u =
   -0.4614    0.4307   -0.7756
   -0.5933    0.5002    0.6307
   -0.6596   -0.7512   -0.0247
s =
   10.7919         0         0         0
         0    4.4799         0         0
         0         0    1.5702         0
v =
   -0.5194   -0.6866    0.2148   -0.4610
   -0.4949   -0.1435    0.1540    0.8431
   -0.4643    0.6790    0.5106   -0.2503
   -0.5193    0.2165   -0.8182   -0.1186

Python:
 

import numpy as np       
def xsvd(H):    
    U, S, V = np.linalg.svd(H)  
    print('U:', U )  
    print('S:', S )  
    print('V:', V )  
    return U , S , V   
    
def UxSxV( U , S, V ) :  
    S1 = np.array( [ [S[0] , 0., 0.,0.] ,  
                     [0. , S[1] , 0.,0.] ,  
                     [0. , 0., S[2] ,0.]   
                    ] )  
    m1 = np.dot( U , S1 )  
    m2 = np.dot( m1 , V )  
    print ( m2 )  
    return m2   

def MxMtran(prom , U ) :
    print ( prom ) 
    Ut = np.transpose( U )
    print( Ut )
    I = np.dot( U , Ut )
    print ( I )
  
def main() :  
    H = np.array( [ [1.,2.,3.,4.],  
                 [2.,3.,5.,3.],  
                 [6.,4.,1.,3.]]  
               )  
    u, s , v = xsvd( H )  
    h = UxSxV ( u , s, v )  
    print( h-H < 0.00001 )
    MxMtran( 'U:' ,  u )
    MxMtran('V:' , v)
  
main()  
U: [[-0.46139677  0.4306905  -0.77564084]
 [-0.59330968  0.50021413  0.63068965]
 [-0.65961855 -0.75119339 -0.02473566]]
S: [10.79190564  4.47986284  1.57022343]
V: [[-0.51943815 -0.4949262  -0.46426993 -0.51931253]
 [-0.68663745 -0.14347541  0.67902721  0.21648525]
 [ 0.21482581  0.15401926  0.51062167 -0.81816469]
 [-0.46104544  0.84305453 -0.25028181 -0.11855454]]
[[1. 2. 3. 4.]
 [2. 3. 5. 3.]
 [6. 4. 1. 3.]]
[[ True  True  True  True]
 [ True  True  True  True]
 [ True  True  True  True]]
U:
[[-0.46139677 -0.59330968 -0.65961855]
 [ 0.4306905   0.50021413 -0.75119339]
 [-0.77564084  0.63068965 -0.02473566]]
[[1.00000000e+00 1.49283451e-16 6.66639328e-17]
 [1.49283451e-16 1.00000000e+00 1.64787722e-16]
 [6.66639328e-17 1.64787722e-16 1.00000000e+00]]
V:
[[-0.51943815 -0.68663745  0.21482581 -0.46104544]
 [-0.4949262  -0.14347541  0.15401926  0.84305453]
 [-0.46426993  0.67902721  0.51062167 -0.25028181]
 [-0.51931253  0.21648525 -0.81816469 -0.11855454]]
[[ 1.00000000e+00  7.26923038e-18  2.55496391e-17  1.26776949e-16]
 [ 7.26923038e-18  1.00000000e+00  3.23831057e-17  2.00324633e-16]
 [ 2.55496391e-17  3.23831057e-17  1.00000000e+00 -1.80240893e-16]
 [ 1.26776949e-16  2.00324633e-16 -1.80240893e-16  1.00000000e+00]]

可以看出,奇异值分解之后再相乘可以还原出原矩阵。与matlab不一样,Python分解出来的S矩阵使用一维数组表示,要矩阵乘的话,需要扩展成代码中的S1 。相应于python ,Matlab出来的V矩阵是转置的。Matlab更符合数学书里的讲法:


可以看出, 公式里的V转置之后作为乘数.所以Matlab导出的是V,而Python导出的是V的转置.

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于python 和 matlab的矩阵奇异值分解 的相关文章

随机推荐

  • 好文

    https www jianshu com p c2ec5f06cf1a
  • 带隙基准电流源设计与改进/自己备忘

    采用1830工艺设计 预设值电流I 10uA 由公式 过驱动电压0 2V 得到PMOS宽长比12 5 1 由公式 过驱动电压0 2V 得到NM8宽长比2 8 1 设置K 4 NM7宽长比4 2 8 1 由公式 带入计算得到R大小为9 96K
  • [1197]脱壳工具dumpDex的使用详解

    文章目录 一 dumpDex概述 二 使用方法 三 脱壳原理 一 dumpDex概述 dumpDex 一个开源的 Android 脱壳插件工具 需要xposed支持 可以用来脱掉当前市场上大部分的壳 360加固 腾讯乐固 梆梆加固 百度加固
  • Googletest 实现简要分析

    借助于 Googletest 测试框架 我们只需编写测试用例代码 并定义简单的 main 函数 编译之后并运行即可以把我们的测试用例跑起来 更详细的内容可参考 Googletest 入门 但 main 函数调用 RUN ALL TESTS
  • MySQL学习1:前期准备

    一 数据库基础知识 1 为什么使用数据库 持久化 数据库是一种持久化介质 即可以将内存数据永久的保存在磁盘上 数据库特性 支持多种数据的复杂性 寻找数据比较容易 2 数据库的一些基本概念 DB 数据库 本质是一个文件系统 能够保存有组织的数
  • 百度 Hydra 工具在移动端 UI 兼容性测试上的高效应用

    导读 尽管自动化测试技术日新月异 但是自动化case构建成本 执行稳定性等问题的存在 使手工测试依然移动端质量保证的重要手段 传统手工测试必须通过人工操作的方式执行测试用例 效率提升依赖测试人员的操作熟练度 本文从介绍百度内UI兼容性测试现
  • Spire.xls+excel文件实现单据打印

    报表和单据打印 通常都是使用fastreport之类的 因为有了现成的xls模板样式 如果转成fastreport那还需要花时间 是用spire xls这个玩意简单 超好用 一 引用 using Spire Xls 二 基本的操作 创建工作
  • 在MinGW启动时激活环境变量

    熟悉Linux的都知道 在进入SHELL时 一共有四种方式添加环境变量与添加自定义命令 如下 文件位置 用途 优先级 补充说明 etc profile 通用环境信息 首用户登录执行 1 会从 etc profile d目录件中搜集shell
  • 阿里与华为,引领科技现代化进程

    阿里NASA计划和华为2012实验室 3月9日 马云在阿里巴巴技术峰会上 首次重磅推出了阿里 NASA 计划 对航天稍有了解的读者都知道 NASA是美国太空总署的英文简称 代表着太空 尖端科技 和人类精神上的英雄主义理想 NASA虽然探索者
  • Dp,DVI,Hdmi接口信号

    DP HDMI与DVI接口信号记录 1 DP接口 DP信号包含主链路 main link 自动辅助通道 AUX CH 和热插拔信号 Hot plug detect 1 主链路采用的是双端交流差分信号 lane 2 带宽提供5 4G 2 7G
  • cmd错误: 找不到或无法加载主类 的解决办法

    写在前面 大家好 我是草莓橙须圆 毕业之前在CSDN和微信公众号活跃 欢迎关注我的公众号 草莓橙须圆 微信号 cmcxy8w 微信公众号主要就是更新一些日常和有用的小工具 CSDN主要就是学习Java过程中总结的笔记 今天遇到的问题 在cm
  • 1.0 java_Mybatis_oracle基于WEB的仓库管理系统的设计与实现(源码+数据库sql+论文+视频齐全)----库管理系统---源码在底部

    基于Web的仓库管理系统的设计与实现 摘 要 仓库物品的管理是与我们的日常生活息息相关的一个重大问题 随着我国经济飞速的发展 改革开放的不断深入 企业要想在激烈的市场竞争中立于不败之地 要想继续的发展与生存 没有现代化的管理方式与方法是万万
  • 微信登录界面安卓代码_安卓模拟器微信登录闪退,转圈,停止运行解决方法

    雷电模拟器微信登录不上 微信闪退 模拟器微信停止运行等等问题一直在论坛出现 雷电模拟器最新版本已经解决了大部分的微信登录问题了 还是会有小部分伙伴出现了难以解决的问题 微信停止运行一般是建议安装最新雷电模拟器最新版本 如果是微信登录不上的话
  • MySQL数据库综合案例1----创建“教务管理系统“数据库

    本节以教育管理系统为例来介绍数据库的创键和数据表的设计 案例需求 1 教务管理系统用来帮助高校学生选修课程 2 学生可以通过系统查看所有选修课的相关信息 包括课程名 学时 学分 也可以查看相关授课老师的信息 3 老师的信息包括教师姓名 性别
  • 用RBF网络实现单输入单输出非线性函数的拟合

    用RBF网络实现单输入单输出非线性函数的拟合 100个输入输出训练样本给定 101个输入输出测试样本给定 要求 使用1 10 1的RBF网络结构 输出节点有阈值 使用KNN K means聚类算法求出10个聚类中心和方差 聚类中心的初始值为
  • 数据库的c#实现 《添加数据》

    1 在SQL中 先创建数据库和表 create database Mycar use Mycar create table Car Id int primary key identity 1 1 设置编号 从1开始自增 每次加1 Title
  • html手风琴案例

    我们在前端开发的时候经常遇到鼠标经过的时候发生事件 鼠标离开的时候发生事件的效果 下面看看效果图 这下来看看我们的代码吧 html部分 div ul li a href img src images 1 jpg alt a li li a
  • Android 屏幕发生旋转对应的生命周期发生变化解析

    博主前些天发现了一个巨牛的人工智能学习网站 通俗易懂 风趣幽默 忍不住也分享一下给大家 点击跳转到网站 一 用户首次进入页面后执行的生命周期回调方法 二 屏幕发生旋转后 切换成了横屏 原先的活动被销毁 会重新创建新的活动 三 将横屏切回为竖
  • 栈和队列的基本操作(栈和队列的区别)

    数据结构中的栈与内存中的栈的不同 一 数据结构中的堆栈 在数据结构中的堆栈 实际上堆栈是两种数据结构 堆和栈 堆和栈都是一种数据项按序排列的数据结构 1 栈就像装数据的桶或箱子 我们先从大家比较熟悉的栈说起吧 它是一种具有后进先出性质的数据
  • 基于python 和 matlab的矩阵奇异值分解

    https www cnblogs com pinard p 6251584 html 可参考 一个 mxn的矩阵H可以分解为 U mxm S mxn V nxn 三个矩阵的乘积 这就是奇异值分解 S是一个对角矩阵 一般从大到小排列 S的元