0%

sklearn稀疏矩阵

Hey

Machine Learning notes

sklearn稀疏矩阵

lil_matrix 使用两个列表储存非0元素,data保存每行中的非零元素,rows保存非零元素所在的列。这种格式也很适合逐个添加元素,并且能快速获取行相关的数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from scipy.sparse import lil_matrix
l = lil_matrix((6,5))
l[2,3] = 1
l[3,4] = 2
l[3,2] = 3
print(l.toarray())
[[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 1. 0.]
[ 0. 0. 3. 0. 2.]
[ 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0.]]
>>> print l.data
[[] [] [1.0] [3.0, 2.0] [] []]
>>> print l.rows
[[] [] [3] [2, 4] [] []]

dok_matrix和lil_matrix适用的场景是逐渐添加矩阵的元素。doc_matrix的策略是采用字典来记录矩阵中不为0的元素。自然,字典的key存的是记录元素的位置信息的元祖,value是记录元素的具体值。

1
2
3
4
5
6
7
8
9
import numpy as np
from scipy.sparse import dok_matrix
S = dok_matrix((5,5), dtype=np.float32)
for i in range(5):
for j in range(5):
S[i,j] = i + j
# 返回的是非零元素的row_index,column_index
S.nonzero()
print(S.toarray())