Copyright © 2022-2024 aizws.net · 网站版本: v1.2.6·内部版本: v1.23.3·
页面加载耗时 0.00 毫秒·物理内存 66.8MB ·虚拟内存 1300.8MB
欢迎来到 AI 中文社区(简称 AI 中文社),这里是学习交流 AI 人工智能技术的中文社区。 为了更好的体验,本站推荐使用 Chrome 浏览器。
稀疏矩阵指的是在数值分析中绝大多数数值为零的矩阵。反之,如果大部分元素都非零,则这个矩阵是稠密的(Dense)。
在科学与工程领域中求解线性模型时经常出现大型的稀疏矩阵。
上图中左边就是一个稀疏矩阵,可以看到包含了很多 0 元素,右边是稠密的矩阵,大部分元素不是 0。
看一个简单例子:
上述稀疏矩阵仅包含 9 个非零元素,另外包含 26 个零元。其稀疏度为 74%,密度为 26%。
SciPy 的 scipy.sparse 模块提供了处理稀疏矩阵的函数。
我们主要使用以下两种类型的稀疏矩阵:
本章节我们主要使用 CSR 矩阵。
我们可以通过向 scipy.sparse.csr_matrix() 函数传递数组来创建一个 CSR 矩阵。
创建 CSR 矩阵。
import numpy as np from scipy.sparse import csr_matrix arr = np.array([0, 0, 0, 0, 0, 1, 1, 0, 2]) print(csr_matrix(arr))
以上代码输出结果为:
(0, 5) 1 (0, 6) 1 (0, 8) 2
结果解析:
我们可以使用 data 属性查看存储的数据(不含 0 元素):
import numpy as np from scipy.sparse import csr_matrix arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]]) print(csr_matrix(arr).data)
以上代码输出结果为:
[1 1 2]
使用 count_nonzero() 方法计算非 0 元素的总数:
import numpy as np from scipy.sparse import csr_matrix arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]]) print(csr_matrix(arr).count_nonzero())
以上代码输出结果为:
3
使用 remove_zeros() 方法删除矩阵中 0 元素:
import numpy as np from scipy.sparse import csr_matrix arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]]) mat = csr_matrix(arr) mat.eliminate_zeros() print(mat)
以上代码输出结果为:
(1, 2) 1 (2, 0) 1 (2, 2) 2
使用 sum_duplicates() 方法来删除重复项:
import numpy as np from scipy.sparse import csr_matrix arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]]) mat = csr_matrix(arr) mat.sum_duplicates() print(mat)
以上代码输出结果为:
(1, 2) 1 (2, 0) 1 (2, 2) 2
csr 转换为 csc 使用 tocsc() 方法:
import numpy as np from scipy.sparse import csr_matrix arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]]) newarr = csr_matrix(arr).tocsc() print(newarr)
(2, 0) 1 (1, 2) 1 (2, 2) 2
图是指各种关系的节点和边的集合,节点是指与对象对应的顶点,边是对象之间的连接。图结构是算法学中最强大的框架之一。SciPy 提供了 scipy.sparse.csgraph 模块来处理图结构。