生成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]
'''


posted @ 2019-10-14 16:02  Philtell  阅读(191)  评论(0编辑  收藏  举报