lil & csr & ndarray & list占用空间比较

feature为(3312, 3312)的稀疏特征矩阵,里面的值全为0或1。由于比较好奇各种存储矩阵的方式之间占用空间的差异,所以做了个实验:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# env
Ubuntu16.04 64
python3.5
pycharm

# experiment

#list
print(sys.getsizeof(feature))

feature_int64 = np.asarray(feature)
feature_int8 = np.asarray(feature, dtype=np.int8)
# ndarray
print(sys.getsizeof(feature_int64))
print(sys.getsizeof(feature_int8))
# csr
print(sys.getsizeof(scipy.sparse.csr_matrix(feature_int64)))
print(sys.getsizeof(scipy.sparse.csr_matrix(feature_int8)))
# lil
print(sys.getsizeof(scipy.sparse.lil_matrix(feature_int64)))
print(sys.getsizeof(scipy.sparse.lil_matrix(feature_int8)))

output:

26736 list

98114800 ndarray int64
12264448 ndarray int8

56 csr int64
56 csr int8

56 lil int64
56 lil int8

可见,csr与lil在这里的占用空间情况相近,list次之,ndarray为最,并且受数据类型影响明显。

按定义来看,lil的读写方式比csr的方便直观一些,csr会有点绕。