SciPy 稀疏数据


什么是稀疏数据

稀疏数据是指大部分未使用元素(不携带任何信息的元素)的数据。

它可以是一个像这样的数组:

[1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0]

稀疏数据:是大多数项目值为零的数据集。

密集阵列:与稀疏数组相反:大多数值是不是零。

在科学计算中,当我们处理线性代数中的偏导数时,我们会遇到稀疏数据。


如何处理稀疏数据

SciPy 有一个模块,scipy.sparse提供处理稀疏数据的函数。

我们主要使用两种类型的稀疏矩阵:

CSC- 压缩稀疏列。为了高效算术,快速列切片。

企业社会责任- 压缩稀疏行。用于快速行切片、更快的矩阵向量乘积

我们将使用企业社会责任本教程中的矩阵。


企业社会责任矩阵

我们可以通过将数组传递给函数来创建 CSR 矩阵scipy.sparse.csr_matrix()

示例

从数组创建 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

从结果中我们可以看到有 3 个项目有值。

1. 项目在行中0位置5并且具有值 1

2. 项目在行中0位置6并且具有值 1

3. 项目在行中0位置8并且具有值 2



稀疏矩阵方法

使用以下命令查看存储的数据(不是零项)data属性:

示例

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)
亲自试一试 »

计算非零数count_nonzero()方法:

示例

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())
亲自试一试 »

使用以下命令从矩阵中删除零条目eliminate_zeros()方法:

示例

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)
亲自试一试 »

消除重复条目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)
亲自试一试 »

使用以下命令从 csr 转换为 csctocsc()方法:

示例

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)
亲自试一试 »

笔记:除了提到的稀疏特定运算之外,稀疏矩阵还支持普通矩阵支持的所有运算,例如整形、求和、算术、广播等。


通过练习测试一下

练习:

插入缺少的方法来打印数组中非零值的数量:

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).())

开始练习