思路:先了解一下稀疏矩阵的定义
在矩阵中,若数值为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]
'''