python知识:稀疏矩阵转换成密度矩阵

本文介绍了如何利用scipy.sparse.coo_matrix类将稀疏矩阵转换为密集矩阵,并展示了通过ijv格式创建稀疏矩阵的例子。COO格式适用于快速构建稀疏矩阵,但不直接支持算术运算和切片,适合于之后转换为CSR或CSC格式以进行高效计算。
摘要由CSDN通过智能技术生成

一、稀疏矩阵转换成密度矩阵

        稀疏矩阵没有特殊的,用三个np.array分别表示,row,column,和data表示稀疏矩阵;但稀疏矩阵转化成密集矩阵,需要快速转换,成熟的处理方法是scipy.sparse.coo_matrix类。

二、scipy.sparse.coo_matrix类定义

class scipy.sparse.coo_matrix(arg1shape=Nonedtype=Nonecopy=False)[source]

  • A sparse matrix in COOrdinate format.
  • Also known as the ‘ijv’ or ‘triplet’ format.

这可以通过多种方式实例化(instantiated ):

  • coo_matrix(D)      具有密集矩阵D
  • coo_matrix(S)    与另一个稀疏矩阵 S (equivalent to S.tocoo())
  • coo_matrix((M, N), [dtype])   构造一个形状为 (M, N) 的空矩阵 ​​dtype 是可选的,默认为 dtype='d'
  • coo_matrix((data, (i, j)), [shape=(M, N)])
  • 从三个数组构造:

    data[:] 矩阵的条目,以任意顺序

    i[:] 矩阵条目的行索引

    j[:] 矩阵条目的列索引

其中 A[i[k], j[k]] = data[k]。未指定形状时,从索引数组推断

注意:

稀疏矩阵可用于算术运算:它们支持加法、减法、乘法、除法和矩阵幂。

COO格式的优势

  • 促进稀疏格式之间的快速转换
  • 允许重复条目(参见示例)
  • 与 CSR/CSC 格式之间的快速转换

COO格式的缺点

不直接支持:

  • 算术运算
  • 切片

预期用途

  • COO 是一种用于构建稀疏矩阵的快速格式
  • 构造矩阵后,转换为 CSR 或 CSC 格式以进行快速算术和矩阵向量运算
  • 默认情况下,当转换为 CSR 或 CSC 格式时,重复的 (i,j) 条目将被汇总在一起。这有助于有效构建有限元矩阵等。 (见示例)

三、实例

3.1 生成空的矩阵

from scipy.sparse import coo_matrix
import numpy as np

mtrix = coo_matrix((3, 4), dtype=np.int8).toarray()
print( mtrix )

>>>array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]], dtype=int8)

3.2 用ijv格式生成矩阵

from scipy.sparse import coo_matrix
import numpy as np
row  = np.array([0, 3, 1, 0])
col  = np.array([0, 3, 1, 2])
data = np.array([4, 5, 7, 9])
mtrix = coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
print( mtrix )
>>>array([[4, 0, 9, 0],
       [0, 7, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 5]])

3.3 构造具有重复索引的矩阵

from scipy.sparse import coo_matrix
import numpy as np
row  = np.array([0, 0, 1, 3, 1, 0, 0])
col  = np.array([0, 2, 1, 3, 1, 0, 0])
data = np.array([1, 1, 1, 1, 1, 1, 1])
coo = coo_matrix((data, (row, col)), shape=(4, 4))
# Duplicate indices are maintained until implicitly or explicitly summed
# np.max(coo.data)
mtrix = coo.toarray()
print( mtrix )
array([[3, 0, 1, 0],
       [0, 2, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 1]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无水先生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值