• 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就是上面的左奇异值。

  • 相关阅读:
    2020以去过半,写一下上半年的总结跟下半年的计划
    js实现浏览器打印功能
    看不见远程新建git分支
    Vue中导出Excel表格方法
    SVN命令使用详解
    IOS NSTimer 定时器用法总结
    静态库与动态库的区别?
    iOS 本地缓存实现 方案借鉴
    IOS开发中NSRunloop跟NSTimer的问题
    FMDB
  • 原文地址:https://www.cnblogs.com/Ph-one/p/11882042.html
Copyright © 2020-2023  润新知