python——稀疏矩阵scipy.sparse

本文详细介绍了Python中Scipy库的稀疏矩阵,包括coo_matrix、dok_matrix、lil_matrix、dia_matrix、csc_matrix、csr_matrix和bsr_matrix等七种类型的稀疏矩阵,以及它们的特点、优缺点和创建方式。此外,还提到了稀疏矩阵的常用函数,如eye、identity、diags、block_diag、bmat、vstack和hstack等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导入方式

import scipy.sparse as sp

一、稀疏矩阵的种类
1.coo_matrix
最简单的存储方式,分别用row、col、val三个数组存储矩阵非零元素的行下标,列下标与值。
不能用下标索引访问元素
coo_matrix无法对矩阵的元素进行增删改等操作,一旦创建之后,除了将之转换成其它格式的矩阵,几乎无法对其做任何操作和矩阵运算。
1)属性Attributes:
dtype:矩阵的数据类型
shape:矩阵的形状
ndim:矩阵的维度,总是为2
nnz:矩阵中存储的值的个数
data:矩阵非零元素的值
row:矩阵非零元素的行下标数组
col:矩阵非零元素的列下标数组
2)创建方式
coo_matrix(D):将密集矩阵D转成coo_matrix稀疏矩阵
coo_matrix(S):将别的格式的稀疏矩阵S转成coo_matrix稀疏矩阵
coo_matrix((M, N), [dtype]):生成形状为(M, N)的指定数据类型dtype的coo_matrix稀疏矩阵

A = sp.coo_matrix((3, 4), dtype=np.int8)
B = A.toarray()   #将稀疏矩阵对象转为NumPy的array
print("A =",A)
print("B =",B)

coo_matrix((data, (row,col)), [shape=(M, N)])

row  = np.array([0, 3, 1, 0])
col  = np.array([0, 3, 1, 2])
data = np.array([4, 5, 7, 9])
A = sp.coo_matrix((data, (row, col)), shape=(4, 4))
B = A.toarray()   #将稀疏矩阵对象转为NumPy的array
print("A =",A)
print("B =",B)
print("A.data =",A.data)
print("A.data的数据类为:",type(A.data))

优点:稀疏格式之间的快速转换,允许重复条目,与CSR/CSC格式间可以非常快速地进行转换
缺点:不允许算术操作和切片

2.dok_matrix
这是一种逐渐增加稀疏矩阵中的元素的有效结构。
将非零值保存在字典,非零值的坐标元组作为字典的键。
构造简单,可快速添加删除元素,但不方便进行数学运算。
dok_matrix(D):将密集矩阵D转成dok_matrix稀疏矩阵
dok_matrix(S):将别的格式的稀疏矩阵S转成dok_matrix稀疏矩阵
dok_matrix((M,N), [dtype]):生成形状为(M, N)的指定数据类型dtype的dok_matrix稀疏矩阵

A = sp.dok_matrix((5, 5), dtype=np.float32)
for i in range(5):
    for j in range(5):
        A[i, j] = i + j    # 更新元素
B = A.toarray()   #将稀疏矩阵对象转为NumPy的array
print("A =",A)
print("B =",B)

优点:对于递增的构建稀疏矩阵很高效,比如定义该矩阵后,想进行每行每列更新值,可用该矩阵。当访问某个单元,只需要O(1)
缺点:不允许重复索引(coo中适用),但可以很高效的转换成coo后进行重复索引

3.lil_matrix
这是一种逐渐增加稀疏矩阵中的元素的有效结构。
将每行的非零元素的列索引保存在一个列表,将对应值保存在另一个列表。
支持切片操作,但不方便进行数学运算。
lil_matrix(D):将密集矩阵D转成lil_matrix稀疏矩阵
lil_matrix(S):将别的格式的稀疏矩阵S转成lil_matrix稀疏矩阵
lil_matrix((M,N), [dtype]):生成形状为(M, N)的指定数据类型dtype的lil_matrix稀疏矩阵

A = sp.lil_matrix((4, 4))
A[0, 2] = 1
A[1, 1] = 2
A[2, 0] = 3
A[2, 3] = 4
A[3, 2] = 5
B = A.toarray()   #将稀疏矩阵对象转为NumPy的array
print("A =",A)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值