转载自:python之SVD函数介绍

函数:np.linalg.svd(a,full_matrices=1,compute_uv=1)

参数:

  • a是一个形如\((M,N)\)的矩阵
  • full_matrices的取值为0或者1,默认值为1,这时u的大小为\((M,M)\),v的大小为\((N,N)\) 。否则u的大小为\((M,K)\),v的大小为\((K,N)\) ,\(K=min(M,N)\)。
  • compute_uv的取值是为0或者1,默认值为1,表示计算u,s,v。为0的时候只计算s。

返回值:

  • 总共有三个返回值u,s,v
  • u大小为\((M,M)\),s大小为\((M,N)\),v大小为\((N,N)\)。
  • \(A=u*s*v\)
  • 其中s是对矩阵a的奇异值分解。s除了对角元素不为0,其他元素都为0,并且对角元素从大到小排列。s中有n个奇异值,一般排在后面的比较接近0,所以仅保留比较大的r个奇异值。

举例:

from numpy import *
data = mat([[1,2,3],[4,5,6]])
U,sigma,VT = np.linalg.svd(data)
print U
[[-0.3863177 -0.92236578]
[-0.92236578 0.3863177 ]]
print sigma
[9.508032 0.77286964]
print VT
[[-0.42866713 -0.56630692 -0.7039467 ]
[ 0.80596391 0.11238241 -0.58119908]
[ 0.40824829 -0.81649658 0.40824829]]

因为sigma是除了对角元素不为0,其他元素都为0。所以返回的时候,作为一维矩阵返回。本来sigma应该是由3个值的,但是因为最后一个值为0,所以直接省略了。

关于奇异值:

  • 对于方阵而言,\(A=QQ^{-1}\),其中\(Q\)为特征向量。但不是方阵的矩阵没有特征向量。
  • 非方阵矩阵可以用奇异值分解描述矩阵。\(A=USV^T\),其中U叫做左奇异值,S叫做奇异值,V叫做右奇异值。因为\(S\)只有对角线的数不为0,并且数值是从大到小排列,所以一般只取r个。r的值越接近\(A\)的列数,那么三个矩阵的乘法得到的矩阵越接近\(A\)。
  • 因为三个矩阵的面积之和远远小于原矩阵\(A\),所以当\(A\)是很大的矩阵,我们向压缩空间表达\(A\)的时候,可以使用这三个矩阵。
  • 当\(A\)不是矩阵时,把\(A\)转置成\(A^T\)。且\((AA^T)v =\lambda v\),其中\(v\)是右奇异值,\(\partial v = \sqrt \lambda\),这里的\(\partial\)就是上述的奇异值。\(u=\frac {Av} {\partial}\),\(u\)就是上面的左奇异值。

numpy.linalg.svd函数的更多相关文章

  1. numpy linalg模块

    # 线性代数# numpy.linalg模块包含线性代数的函数.使用这个模块,可以计算逆矩阵.求特征值.解线性方程组以及求解行列式等. import numpy as np # 1. 计算逆矩阵# 创 ...

  2. python中numpy计算数组的行列式numpy.linalg.det()

    numpy.linalg.det numpy.linalg.det(a)[source] 计算任何一个数组a的行列式,但是这里要求数组的最后两个维度必须是方阵. 参数: a : (..., M, M) ...

  3. scipy几乎实现numpy的所有函数

    NumPy和SciPy的关系?   numpy提供了数组对象,面向的任何使用者.scipy在numpy的基础上,面向科学家和工程师,提供了更为精准和广泛的函数.scipy几乎实现numpy的所有函数, ...

  4. 为什么你用不好Numpy的random函数?

    为什么你用不好Numpy的random函数? 在python数据分析的学习和应用过程中,经常需要用到numpy的随机函数,由于随机函数random的功能比较多,经常会混淆或记不住,下面我们一起来汇总学 ...

  5. np.random.random()函数 参数用法以及numpy.random系列函数大全

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/9751471.html 1.np.random.random()函数参数 np.random.r ...

  6. NumPy数学算数函数

    NumPy - 算数函数 很容易理解的是,NumPy 包含大量的各种数学运算功能. NumPy 提供标准的三角函数,算术运算的函数,复数处理函数等. 三角函数 NumPy 拥有标准的三角函数,它为弧度 ...

  7. Python之Numpy库常用函数大全(含注释)

    前言:最近学习Python,才发现原来python里的各种库才是大头! 于是乎找了学习资料对Numpy库常用的函数进行总结,并带了注释.在这里分享给大家,对于库的学习,还是用到时候再查,没必要死记硬背 ...

  8. 【转】np.random.random()函数 参数用法以及numpy.random系列函数大全

    转自:https://www.cnblogs.com/DOMLX/p/9751471.html 1.np.random.random()函数参数 np.random.random((1000, 20) ...

  9. Numpy | 14 字符串函数

    本章函数用于对 dtype 为 numpy.string_ 或 numpy.unicode_ 的数组执行向量化字符串操作. 它们基于 Python 内置库中的标准字符串函数. 这些函数在字符数组类(n ...

随机推荐

  1. 如何解决div背景色半透明,里面的图片不透明问题

    用rgba可以实现,不能用opacity 背景做成透明的背景图,opacity属性影响子集的,除非把两者独立开~

  2. LCD 驱动 S3C2440A

    LCD Control 1 Register 以16BPP为例 LCD Control 2 Register LCD Control 3 Register LCD Control 4 Register ...

  3. 【知识点整理】Oracle中NOLOGGING、APPEND、ARCHIVE和PARALLEL下,REDO、UNDO和执行速度的比较

    [知识点整理]Oracle中NOLOGGING.APPEND.ARCHIVE和PARALLEL下,REDO.UNDO和执行速度的比较 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 ...

  4. redis基本操作使用

    连接redis [root@master src]# redis-cli 127.0.0.1:6379> ping PONG 127.0.0.1:6379> set name root O ...

  5. PostgreSQL分区表实现——pg_pathman安装、配置

    近日由于系统运行时间太长,数据库库表中的数据也是越来越多,为了缩短库表的操作时间,所以对数据库中的部分库表进行分区的操作. 通过研究,决定采用pg_pathman插件对库表进行分区操作.pg_path ...

  6. matplotlib setting zh-hans

    from matplotlib import pyplot as plt from matplotlib import font_manager import random # you font fa ...

  7. svn: E155004: Working copy '/data/www' locked.

    svn: run 'svn cleanup' to remove locks (type 'svn help cleanup' for details) svn: E155004: Working c ...

  8. ServicePoint 类

    地址:https://docs.microsoft.com/zh-cn/dotnet/api/system.net.servicepoint?view=netframework-4.7.2 提供 HT ...

  9. 划分土地(how many pieces of land)

    题目描述: 给一个椭圆,上面有n个点,两两连接这n个点,得到的线段能把椭圆分为几个区域? 思路: 首先想想,n个点在椭圆边缘,每两个点两两连接有\(C^2_n\)条线段,这些线段交于很多点,求这些线段 ...

  10. appium+python自动化63-使用Uiautomator2报错问题解决

    前言 appium desktop V1.7.1版本使用命令行版本启动appium后,使用Uiautomator2定位toast信息报错:appium-uiautomator2-server-v0.3 ...