1. SciPy稀疏矩阵简介
scipy.sparse只能存储二维稀疏矩阵。
numpy.ndarray可以直接转换为稀疏矩阵。
*是逐元素相乘,@是矩阵乘法。
SciPy稀疏矩阵类别(可以通过to类别()函数进行转换):
- csc_matrix: Compressed Sparse Column format
- csr_matrix: Compressed Sparse Row format
- bsr_matrix: Block Sparse Row format
- lil_matrix: List of Lists format
- dok_matrix: Dictionary of Keys format
- coo_matrix: COOrdinate format (aka IJV, triplet format)
- dia_matrix: DIAgonal format
csr/csc/coo格式之间的转换是高效的线性操作。
2. 稀疏矩阵和稠密矩阵的互相转换
- 稠密矩阵可以直接通过稀疏矩阵类别进行转换,示例:
from scipy.sparse import csr_matrix A = csr_matrix([[1, 2, 0], [0, 0, 3], [4, 0, 5]])
- 稀疏矩阵使用toarray()函数转换为稠密矩阵
3. 储存和加载稀疏矩阵
save_npz(file, matrix[, compressed]): Save a sparse matrix to a file using .npz format.
(官方文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.save_npz.html)
load_npz(file): Load a sparse matrix from a file using .npz format.
(官方文档:https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.load_npz.html)
4. COO COOrdinate format
每个非0元素储存为行-列-值的形式。非常直观。也是最容易从邻接矩阵转换为edge index的格式,直接从row中获取头节点索引,从col中获取尾节点索引即可。
需要注意的是COO稀疏矩阵无法直接通过行索引切片,否则会报TypeError: 'coo_matrix' object is not subscriptable,但是可以直接将其转换成csr格式,然后再切片。举例:coo_matrix1.tocsr()[slicing_begin_index:]
方法:
- count_nonzero():计算非0元素总数
https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.coo_array.count_nonzero.html