zoukankan      html  css  js  c++  java
  • numpy.linalg.svd函数

    本文链接:https://blog.csdn.net/rainpasttime/article/details/79831533
    函数: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     其中的就是特征向量。但是对于不是方阵的矩阵而言就没有特征向量。
    非方阵的矩阵可以用奇异值分解来描述这个矩阵。A=UVT。其中U叫做左奇异值,叫做奇异值,V叫做右奇异值。因为只有对角线的数不为0,并且数值是从大到小排列,所以一般只取r个,r的值越接近A的列数,那么三个矩阵的乘法得到的矩阵越接近A。
    因为三个矩阵的面积之和远远小于原矩阵A,所以当我们向压缩空间表达A的时候,可以使用这三个矩阵。
    当A不是矩阵的时候,把A转置变为 AT。并且。其中的v就是右奇异值。,这里的就是上面的奇异值。,这里的u就是上面的左奇异值。

  • 相关阅读:
    随笔2
    随笔
    关于updateElement接口
    随笔1
    本地访问正常,服务器访问乱码 记录
    Redis (error) NOAUTH Authentication required.解决方法
    tomcat启动很慢 停留在 At least one JAR was scanned for TLDs yet contained no TLDs.
    微信公众号消息回复
    微信公众号 报token验证失败
    idea中web.xml报错 Servlet should have a mapping
  • 原文地址:https://www.cnblogs.com/Ph-one/p/11882042.html
Copyright © 2011-2022 走看看