zoukankan      html  css  js  c++  java
  • 生成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]
    '''
    
    
    
  • 相关阅读:
    springcloud 入门 11 (Hystrix Dashboard)
    springcloud 入门 10 (eureka高可用)
    springcloud 入门 9 (消息总线)
    springboot 学习之路 20 (整合RabbitMQ)
    springcloud 入门 8 (config配置中心)
    springcloud 入门 7 (zuul路由网关)
    springcloud 入门 6 (断路器hystrix)
    springcloud 入门 5 (feign源码分析)
    springcloud 入门 4 (rebbon源码解读)
    Java实现多线程下载 URL以及URLConnection
  • 原文地址:https://www.cnblogs.com/CCCrunner/p/11781561.html
Copyright © 2011-2022 走看看