Python scipy.sparse矩陣使用方法
本文以csr_matrix為例來說明sparse矩陣的使用方法,其他類型的sparse矩陣可以參考https://docs.scipy.org/doc/scipy/reference/sparse.html
csr_matrix是Compressed Sparse Row matrix的縮寫組合,下面介紹其兩種初始化方法
csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)])
where data, row_ind and col_ind satisfy the relationship a[row_ind[k], col_ind[k]] = data[k]
csr_matrix((data, indices, indptr), [shape=(M, N)])
is the standard CSR representation where the column indices for row i are stored in indices[indptr[i]:indptr[i+1]] and their corresponding values are stored in data[indptr[i]:indptr[i+1]]. If the shape parameter is not supplied, the matrix dimensions are inferred from the index arrays.
上述官方文檔給出了:稀疏矩陣的參數及其含義、稀疏矩陣的構造方式。闡述形式簡單明了,讀起來令人賞心悅目。
Sparse matrices can be used in arithmetic operations: they support addition, subtraction, multiplication, division, and matrix power
Advantages of the CSR format
- efficient arithmetic operations CSR + CSR, CSR * CSR, etc.
- efficient row slicing
- fast matrix vector products
Disadvantages of the CSR format
- slow column slicing operations (consider CSC)
- changes to the sparsity structure are expensive (consider LIL or DOK)
上述官方文檔時稀疏矩陣的一些特性以及csr_matrix的優缺點,並且在指明各種缺點的同時,提供了可以考慮的技術實現。
代碼示例1
import numpy as np from scipy.sparse import csr_matrix row = np.array([0, 0, 1, 2, 2, 2]) col = np.array([0, 2, 2, 0, 1, 2]) data = np.array([1, 2, 3, 4, 5, 6]) a = csr_matrix((data, (row, col)), shape=(3, 3)).toarray()
print(a)
運行結果:
array([[1, 0, 2], [0, 0, 3], [4, 5, 6]])
代碼示例2
indptr = np.array([0, 2, 3, 6]) indices = np.array([0, 2, 2, 0, 1, 2]) data = np.array([1, 2, 3, 4, 5, 6]) a = csr_matrix((data, indices, indptr), shape=(3, 3)).toarray() print(a)
允許結果:
array([[1, 0, 2], [0, 0, 3], [4, 5, 6]])
Python scipy.sparse矩陣使用方法