SciPy 稀疏数据

创建于 2024-12-03 / 33
字体: [默认] [大] [更大]

什么是稀疏数据

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

可以是这样的数组:

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

Sparse Data:是大多数item值为零的数据集。

Dense Array:与稀疏数组相反:大多数值为零。

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


如何处理稀疏数据

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

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

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

CSR - 压缩稀疏行。 对于快速行切片,更快的矩阵向量积

我们将在本教程中使用 CSR 矩阵。


CSR Matrix

我们可以通过将数组传递给函数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

从结果中我们可以看到有 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) 亲自试一试 »

使用 tocsc() 方法从 csr 转换为 csc:

实例

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

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



0 人点赞过