1、什么是稀疏数据(Sparse Data)
稀疏数据是具有大部分未使用元素(不携带任何信息的元素)的数据。
可以是这样的数组:
[1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0]
稀疏数据:是一个数据集,其中大多数项目值均为零。密集数组:与稀疏数组相反:大多数值不为零。
在科学计算中,当我们处理线性代数中的偏导数时,我们会遇到稀疏数据。
2、如何处理稀疏数据
SciPy具有scipy.sparse
模块,该模块提供处理稀疏数据的功能。
我们主要使用两种类型的稀疏矩阵:
CSC-压缩的稀疏列。为了进行有效的算术运算,可以快速进行列切片。
CSR-压缩的稀疏行。对于快速行切片,更快的矩阵向量乘积
在本教程中,我们将使用CSR矩阵。
3、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个项目具有值。
第一个项目在行0
在位置5
中,其值为1
。
第二个项目在行0
在位置6
中,并且值为1
。
第三个项目在行0
在位置8中
,并具有值2
。
4、稀疏矩阵的方法
使用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)
注意:除了上述提到的稀疏特定操作外,稀疏矩阵还支持普通矩阵支持的所有操作,例如:reshaping, summing, arithemetic, broadcasting etc.