SciPy 稀疏数据
什么是稀疏数据
稀疏数据是包含大部分未使用元素(不携带任何信息的元素)的数据。
可以是这样的数组:
[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)
亲自试一试 »
注释:除了提到的稀疏特定操作之外,稀疏矩阵支持普通矩阵支持的所有操作,例如 整形、求和、算术、广播等。