• numpy.linalg.svd函数


    转载自: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)就是上面的左奇异值。
  • 相关阅读:
    冲刺第四天
    冲刺第三天
    冲刺第二天
    评估前冲刺第一天
    点击切换上一页,下一页
    react生命周期
    package.json入门
    nodeType的十二种类型
    ECMAScript 6 let和const命令
    JavaScript语言精粹_JSON
  • 原文地址:https://www.cnblogs.com/xym4869/p/11301727.html
Copyright © 2020-2023  润新知