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

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

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

相关文章
|
1月前
|
缓存 Java Python
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用(1)
python-静态方法staticmethod、类方法classmethod、属性方法property_python staticmethod类内使用(1)
|
6天前
|
存储 缓存 Python
深入了解python中元类和连接符的用法
【6月更文挑战第20天】本文介绍包括`type`的多重用途,内建函数的常量,模块属性,类继承的概念,元类的工作原理,可哈希对象的重要性,加权平均值的计算,以及如何找到两个列表的交集。
52 5
深入了解python中元类和连接符的用法
|
2天前
|
安全 测试技术 Python
Python类中的Setter与Getter:跨文件调用的艺术
Python类中的Setter与Getter:跨文件调用的艺术
10 3
|
12天前
|
Python
Python 高质量类编写指南
Python 高质量类编写指南
39 15
|
3天前
|
SQL 分布式计算 大数据
MaxCompute产品使用问题之建了一个python 的 UDF脚本,生成函数引用总是说类不存在,是什么导致的
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
7天前
|
存储 程序员 Python
Python类属性与实例属性详解
Python 中区分类属性和实例属性的设计是为了满足不同的需求和使用场景。这种区分使得代码更加灵活、清晰,并且能够提供更好的封装性和可维护性。类属性用于表示与整个类相关的数据,而实例属性则用于表示每个实例的特定信息。这样,我们可以将关注点分离开来,使得代码更易于理解、维护和扩展。在实际应用中,我们可以根据具体的情况,选择适当的属性类型来组织和管理代码。
12 1
|
8天前
|
存储 搜索推荐 Python
【随手记】python语法:类属性和实例属性
【随手记】python语法:类属性和实例属性
23 1
|
8天前
|
Java 索引 Python
深入理解 Python 类中的各种方法
在 Python 中,类不仅仅是对象的蓝图,它还提供了多种方法,使我们能够以更灵活和强大的方式编写代码。本文将详细介绍 Python 类中的各种方法,包括实例方法、类方法、静态方法、特殊方法等,并通过示例展示它们的用法和区别。
|
12天前
|
算法 Java API
Python零基础入门-9类
Python零基础入门-9类
|
13天前
|
C++ Python
Python基础教程(第3版)中文版 第7章 类和对象(笔记)
Python基础教程(第3版)中文版 第7章 类和对象(笔记)