稠密矩阵是我们在处理大型数据时,经常会遇到的;然而由于其稀疏性,直接将其存储势必会造成内存的浪费,那么如何将其转为稀疏矩阵并将其各个属性进行保存?本文将简单的实例进行讲解。
一、将稠密矩阵转为稀疏矩阵
1.首先需要有一个稠密矩阵,此处记作adj:
2.将稠密矩阵adj转为稀疏矩阵adj_sp:
import scipy.sparse
adj_sp=scipy.sparse.csr_matrix(adj)
adj_sp
(顺便提一下:稀疏转稠密的代码:adj_sp.todense() )
(另外,转为稀疏的方式有很多,并不只有以上这一种方式,具体可以参考:https://blog.youkuaiyun.com/jeffery0207/article/details/100064602?)
3.查看稀疏矩阵adj_sp中的各个属性:
各个属性的具体含义可以参考:https://blog.youkuaiyun.com/Sherry_Yue/article/details/102652829
(1)adj_data=adj_sp.data
(2)adj_indices=adj_sp.indices
(3)adj_indptr=adj_sp.indptr
(4)adj_shape=adj_sp.shape
二、将稀疏矩阵中各个属性存储为.npz格式
import numpy as np
np.savez("adj.npz",adj_data=adj_data,adj_indices=adj_indices,adj_indptr=adj_indptr,adj_shape=adj_shape)
(" "内表示存储的文件名,也可以存储到指定目录下。)
(常见文件存储以及读取的函数可以参考:https://blog.youkuaiyun.com/weixin_40547993/article/details/89643636?)
三、读取.npz文件
1.字典方式读取文件:
loader=dict(np.load("adj.npz"))
loader
2.将读取内容再转为稀疏矩阵形式
test=scipy.sparse.csr_matrix((loader['adj_data'],loader['adj_indices'],loader['adj_indptr']),shape=loader['adj_shape'])
test
3.将稀疏转为稠密格式查看:
test.todense()
可以看到和我们最初的稠密矩阵adj是完全相同的。