【Python】稀疏矩阵

2024-09-05  本文已影响0人  盐果儿

稀疏矩阵(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())

上一篇 下一篇

猜你喜欢

热点阅读