SciPy稀疏矩阵类 scipy.sparse(持续更新ing...)

诸神缄默不语-个人优快云博文目录

scipy官方文档:SciPy documentation — SciPy v1.9.0 Manual
scipy.sparse官方文档:Sparse matrices (scipy.sparse) — SciPy v1.9.0 Manual

scipy的稀疏矩阵感觉应该是万物之源,据我所知PyTorch的稀疏矩阵就是改自scipy,然后PyG的稀疏矩阵又改自PyTorch。
而且SciPy的稀疏矩阵是这几个里面文档最清晰的。torch_sparse不如说根本就没有文档吧!直接看源代码未免太刺激了!

最近更新时间:2022.12.6
最早更新时间:2022.8.17

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:]

方法:

  1. count_nonzero():计算非0元素总数
    https://docs.scipy.org/doc/scipy/reference/generated/scipy.sparse.coo_array.count_nonzero.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诸神缄默不语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值