SciPy 稀疏資料
什麼是稀疏資料
稀疏資料是大部分元素是未使用的(不攜帶任何資訊的元素)的資料。
它可以是一個像這樣的陣列
[1, 0, 2, 0, 0, 3, 0, 0, 0, 0, 0, 0]
稀疏資料: 是一個數據集中大部分項的值為零。
密集陣列: 是稀疏陣列的相反:大部分值不是零。
在科學計算中,當我們處理線性代數中的偏微分方程時,我們會遇到稀疏資料。
如何處理稀疏資料
SciPy 有一個模組,scipy.sparse
,它提供了處理稀疏資料的功能。
我們主要使用兩種型別的稀疏矩陣
CSC - Compressed Sparse Column(壓縮稀疏列)。用於高效的算術運算,快速的列切片。
CSR - Compressed Sparse Row(壓縮稀疏行)。用於快速的行切片,更快的矩陣向量乘法。
在本教程中,我們將使用CSR矩陣。
CSR 矩陣
我們可以透過將一個數組傳遞給函式 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)
自己動手試一試 »
注意: 除了上述提到的稀疏特定操作外,稀疏矩陣還支援所有常規矩陣的操作,例如重塑、求和、算術運算、廣播等。