稀疏矩阵(sparse matrix):矩阵中大部分数字为0,因此存储整个矩阵会浪费空间,为了节省内存和提高运算效率,稀疏矩阵采用专门的数据结构来仅存储非零元素及其位置。
为什么要稀疏矩阵?主要是为了“省”。
COO(Coordinate List):用于存储稀疏矩阵的数据结构,存储了坐标和非零元素的值。
CSR(Compressed Sparse Row):说是压缩了行,没看出来??????
COO格式:通过三个一维数组直接存储非零元素的位置和数值,适合构建和修改稀疏矩阵。
CSR格式:通过压缩存储行信息,使得行访问和矩阵乘法等操作更高效,适合于执行各种矩阵运算。
将一个普通矩阵转化成COO矩阵:
from scipy.sparse import coo_array
A = np.array([ [0, 0, 3], [4, 0, 0], [0, 0, 5]])
Asparse = coo_array(A)
print(Asparse)
# 仅打印data
print(Asparse.data)
# output:
# <COOrdinate sparse array of dtype 'int64' with 3 stored elements and shape (3, 3)>
# Coords Values
# (0, 2) 3
# (1, 0) 4
# (2, 2) 5
将一个普通矩阵转化成CSR矩阵:
import numpy as np
from scipy.sparse import csr_matrix
# 创建一个普通的 NumPy 密集矩阵
dense_matrix = np.array([ [0, 0, 3, 0], [4, 0, 0, 0], [0, 0, 0, 5], [0, 0, 0, 0]])
# 将密集矩阵转换为 CSR 矩阵
csr = csr_matrix(dense_matrix)
# 打印 CSR 矩阵
print(csr)
# output
# <Compressed Sparse Row sparse matrix of dtype 'int64' with 3 stored elements and shape (4, 4)>
# Coords Values
# (0, 2) 3
# (1, 0) 4
# (2, 3) 5
- 仅打印数据
print(a_sparse.data)
- 获取和打印稀疏矩阵中非零元素的索引位置
a_sparse = coo_array(A)
print(a_sparse.nonzero())
网友评论