• 生成50*200的稀疏矩阵并求Sigma值


    思路:先了解一下稀疏矩阵的定义

    在矩阵中,若数值为0的元素数目远远多于非0元素的数目,并且非0元素分布没有规律时,则称该矩阵为稀疏矩阵;与之相反,若非0元素数目占大多数时,则称该矩阵为稠密矩阵。定义非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。通常认为矩阵中非零元素的总数比上矩阵所有元素总数的值小于等于0.05时,则称该矩阵为稀疏矩阵(sparse matrix)

    因此,我们只要获得小于50 X 200 X 0.05 个的非零值,并把他们随机存放到200 X 50的矩阵中,并用SVD分解该矩阵得到Sigma值就可以了。

    import numpy as np
    from numpy import *;
    import scipy.sparse as ss
    import  random
    
    rows = np.random.randint(50,size=10) #随机生成有数据的行
    '''
    [19 14  2 18  8 10 13 27 42 26]
    '''
    cols = np.random.randint(200,size=50) #随机生成有数据的列
    '''
    [ 57  79  52 164 135  81  97 131 198  11  74 168 105  90 114  39  87   1
      13  34 136  65  36 173 162  18 135 172 128  30  62 190  21  63 130  95
     110  22  56 172  13 104 157  91 127  80 130 176 152  43]
    '''
    v = np.random.randint(23,size=500) #随机生成500个 23以内的数据
    '''
    [ 1 14 12  0 19 13  8 12 10  4  4 21 22 13 15 17  5 21 18  2 19 14  7 20
      4 22  4 11  1 19  5 18  7  5 15 20  4 14  3  7  2 13  6 22  0 15 19 10
     15 10  1  6 19  6  0 11 21 20  0 19 15  9  9 16 14  1  8  1  5  3 16 21
      4  8 11 20  3  1 10  7  4  4 19 19 16 21  2  1 18 17 19  1 10  0  0 14
     20 18 19 18 19 17 19  7  5 12 11 15 21  0 10  2 13  6 12 14  6  5 14 15
      4  7  9 18  7  9 15  5 22  1 18  9  5 14  5  9  5  0 12 22 19  3 10 22
     20  6 15  7 12  2 22  7 18 18  8  8  5  8 19  9 13 22 22  2  8  4 14 21
     16 16  0  8 16  1 20 22 13  1  1 10 22 18 15  6  1 19 21  7  0 16 20  8
      5  3 12 19  3  5  6 18 11  8 11  4  1  8 18 10 12 22  1 12 17 22 16  5
     10 10 16  9 13 15 15 17  6 11  6  7  5 19 14 11  1  1 17 18 19 11 10 16
      0  4  9  8  0  8  7 21 14  7 12 22 16 11 18 18  1  3 14 13  8  5  8 13
      6 20  1  8  3  3 11  0 16 12  6 22 22 16 11 22 21  1  2 10 16 13 22  0
      6 17 11  7  3 21  7  5 21  2  4 13 14 17 19  0  1 15 22  1 13 21 15 11
      1 14  4 10 22  3  0 22 22  8 19 22 18  9  2  5 10  6 21 18  5  0  0  4
     12  8  2 22 10  2  0 11 16  2 15 17 10  3 12 21  0  4 13 20 10  2 20  1
      1  3  1 14  2 10  3  2 20  1  1 15 18  1  7  0 12 21 19  9  5  4 17 20
     12  8 18 14 17  3  4 17  9 14 17  3  6  5 16 16 11 18  0  1  5 17  4 15
      4  0 19  5 13  8  3 17 13 17  6  5 20  7 17  0 13  6  8 16 17  1 20  4
      0  2  4 18 18 15 18 14  0 13  3 20  7  8 22 13 10  3 14  5 16  4 20 10
      1  4 18 14 11  1  9 16 15  4  0 22 16 20  0  6  9  5  3 14  9 19  8 20
      4 11  2  0  4 16 14  9  5 11 21 19  3  1  1 22  8  4  2 10]
    '''
    
    a = np.zeros((50,200)) #生成 50X200的零矩阵
    h = 0
    for i in rows:  #给矩阵赋值
        for j in cols:
            a[i,j] = v[h]
            h=h+1
    
    U,Sigma,VT = linalg.svd(a)
    print(Sigma)
    '''
    [2.25778682e+02 6.61118942e+01 5.30274521e+01 4.74096100e+01
     4.09668933e+01 3.80788178e+01 3.69098965e+01 3.56398793e+01
     3.10128734e+01 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14 1.95148626e-14 1.95148626e-14
     1.95148626e-14 1.95148626e-14]
    '''
    
    
    
  • 相关阅读:
    C#读物
    那些健康手环真的值得买么?
    书籍推荐系列之一 -- 《凤凰项目:一个IT运维的传奇故事》
    测试
    HDU-2024 C语言合法标识符
    HDU-4548 美素数
    求最大流dinic算法模板
    最小费用最大流模板理解
    网络流初步——增广路代码的分析
    最短路的另外两种算法
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781561.html
Copyright © 2020-2023  润新知