众所周知,稀疏矩阵是指矩阵中大多数元素都是0的矩阵。对于稀疏矩阵,把它们当成正常矩阵来存储会很浪费空间,尤其是当矩阵的维度特别大的时候。存储稀疏矩阵的合理方式,是只存储非零元素的值,和它们在矩阵中的位置。
SciPy 中有 7 种存储稀疏矩阵的数据结构:
- bsr_matrix: Block Sparse Row matrix
- coo_matrix: COOrdinate format matrix
- csc_matrix: Compressed Sparse Column matrix
- csr_matrix: Compressed Sparse Row matrix
- dia_matrix: Sparse matrix with DIAgonal storage
- dok_matrix: Dictionary Of Keys based sparse matrix
- lil_matrix: Row-based LInked List sparse matrix
如何选择正确的稀疏矩阵
不同的稀疏矩阵适用的操作不同。如果想创建一个新的稀疏矩阵,lil_matrix
,dok_matrix
和coo_matrix
会比高效,但是它们不适合做矩阵运算。如果想做矩阵运算,例如矩阵乘法、求逆等,应该用 CSC 或者 CSR 类型的稀疏矩阵。由于在内存中存储顺序的差异,csc_matrix
矩阵更适合取列切片,而 csr_matrix
矩阵更适合用来取行切片。
几种稀疏矩阵的用法
这里只介绍其中的 coo_matrix
,csc_matrix
,csr_matrix
和 lil_matrix
。
加载必要的库:
from scipy import sparse
import numpy as np
coo_matrix
coo_matrix 是最直观的稀疏矩阵定义方式。它的全称是 coordinate sparse matrix,从名字可以看出,它通过非零元素在矩阵中的坐标存储稀疏矩阵。 下面的代码将展示