基于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的矩阵奇异值分解 的相关文章

  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 导入错误:没有名为 _ssl 的模块

    带 Python 2 7 的 Ubuntu Maverick 我不知道如何解决以下导入错误 gt gt gt import ssl Traceback most recent call last File
  • Flask 和 uWSGI - 无法加载应用程序 0 (mountpoint='')(找不到可调用或导入错误)

    当我尝试使用 uWSGI 启动 Flask 时 出现以下错误 我是这样开始的 gt cd gt root localhost uwsgi socket 127 0 0 1 6000 file path to folder run py ca
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 如何在 MATLAB 中绘制 3D 曲面图?

    我有一个像这样的数据集 0 1 0 2 0 3 0 4 1 10 11 12 13 2 11 12 13 14 3 12 13 14 15 4 13 14 15 16 我想在 matlab 中绘制 3D 曲面图 使列标题位于 y 轴 行标题
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • 安装后 Anaconda 提示损坏

    我刚刚安装张量流GPU创建单独的后环境按照以下指示here https github com antoniosehk keras tensorflow windows installation 但是 安装后当我关闭提示窗口并打开新航站楼弹出
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • 在 NumPy 中获取 ndarray 的索引和值

    我有一个 ndarrayA任意维数N 我想创建一个数组B元组 数组或列表 其中第一个N每个元组中的元素是索引 最后一个元素是该索引的值A 例如 A array 1 2 3 4 5 6 Then B 0 0 1 0 1 2 0 2 3 1 0
  • Python 中的二进制缓冲区

    在Python中你可以使用StringIO https docs python org library struct html用于字符数据的类似文件的缓冲区 内存映射文件 https docs python org library mmap
  • NameError:名称“urllib”未定义”

    CODE import networkx as net from urllib request import urlopen def read lj friends g name fetch the friend list from Liv
  • python 集合可以包含的值的数量是否有限制?

    我正在尝试使用 python 设置作为 mysql 表中 ids 的过滤器 python集存储了所有要过滤的id 现在大约有30000个 这个数字会随着时间的推移慢慢增长 我担心python集的最大容量 它可以包含的元素数量有限制吗 您最大
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • 循环中断打破tqdm

    下面的简单代码使用tqdm https github com tqdm tqdm在循环迭代时显示进度条 import tqdm for f in tqdm tqdm range 100000000 if f gt 100000000 4 b
  • 如何改变Python中特定打印字母的颜色?

    我正在尝试做一个简短的测验 并且想将错误答案显示为红色 欢迎来到我的测验 您想开始吗 是的 祝你好运 法国的首都是哪里 法国 随机答案不正确的答案 我正在尝试将其显示为红色 我的代码是 print Welcome to my Quiz be
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方

随机推荐

  • 好文

    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的元