SciPy 稀疏矩阵

稀疏矩阵

稀疏矩阵(Sparse Matrix)是指包含大部分未使用元素(不包含任何信息的元素)的数据。

它可以是这样一个数组:

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

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

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

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


如何处理稀疏矩阵

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

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

CSC -压缩稀疏列。按列压缩。

CSR - 压缩的稀疏行。按行压缩。

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


CSR 矩阵

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

实例

从数组中创建一个 CSR 矩阵:

  1. import numpy as np
  2. from scipy.sparse import csr_matrix
  3. arr = np.array([0, 0, 0, 0, 0, 1, 1, 0, 2])
  4. print(csr_matrix(arr))

返回值:

  1. (0, 5) 1
  2. (0, 6) 1
  3. (0, 8) 2

从结果中,我们可以看到有 3 项具有值。

第 1 个位于第 0 行位置 5,其值为 1。

第 2 个位于第 0 行位置 6,其值为 1。

第 3 个位于第 0 行位置 8,其值为 2。


稀疏矩阵方法

使用 data 属性查看存储的数据(非零项):

实例
  1. import numpy as np
  2. from scipy.sparse import csr_matrix
  3. arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
  4. print(csr_matrix(arr).data)

通过 count_nonzero() 方法计算非零数据:

实例
  1. import numpy as np
  2. from scipy.sparse import csr_matrix
  3. arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
  4. print(csr_matrix(arr).count_nonzero())

通过 eliminate_zeros() 方法从矩阵中移除 零数据 :

实例
  1. import numpy as np
  2. from scipy.sparse import csr_matrix
  3. arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
  4. mat = csr_matrix(arr)
  5. mat.eliminate_zeros()
  6. print(mat)

通过 sum_duplicates() 方法排除重复数据:

实例

排除重复项:

  1. import numpy as np
  2. from scipy.sparse import csr_matrix
  3. arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
  4. mat = csr_matrix(arr)
  5. mat.sum_duplicates()
  6. print(mat)

通过 tocsc() 方法将 csr 转换为 csc :

实例
  1. import numpy as np
  2. from scipy.sparse import csr_matrix
  3. arr = np.array([[0, 0, 0], [0, 0, 1], [1, 0, 2]])
  4. newarr = csr_matrix(arr).tocsc()
  5. print(newarr)
注意:除了上述稀疏特定操作外,稀疏矩阵支持普通矩阵支持的所有操作,例如整形、求和、算术、广播等。