Scipy.sparse模块中的coo_matrix、csc_matrix、csr_matrix函数

  • 三种函数的英文全名,首先是从表面意思上入手。
    coo_matrix :COOrdinate format matrix(坐标格式矩阵)
    csc_matrix:Compressed Sparse Column matrix(压缩稀疏列矩阵)
    csr_matrix:Compressed Sparse Row matrix(压缩稀疏行矩阵)
    这三个函数都是用来构建稀疏矩阵(矩阵中非0元素较少)的,而且可以得到一样的矩阵,只是方式不同。
  • coo_matrix
    先从容易理解的coo_matirx开始,帮助大家对构造稀疏矩阵方法有个初步的认识。
from scipy.sparse import coo_matrix
import numpy as np
row = np.array([1, 1, 3, 2]) # 行索引
col = np.array([0, 2, 2, 3]) # 列索引
data= np.array([5, 8, 4, 9]) # 索引对应的数值
coo = coo_matrix((data, (row, col)), shape=(4, 4)).todense()
#先看shape,表示这个稀疏矩阵是4x4大小的,所有值初始都为0,即4x4的全0矩阵
#(row, col)行、列组合就表示一个具体的位置,其(1,0),(1,2),(3,2),(2,3)就是4x4矩阵的索引位置。
#data,表示索引位置上的数值,即(1,0)上的数值为5,(1,2)上的数值为8,等等。
#todense,作用可以自己试试,如果没有这个函数,则输出如下结果
#  (1, 0)	5
#  (1, 2)	8
#  (3, 2)	4
#  (2, 3)	9
print(coo)
#打印出coo稀疏矩阵

输出:

[[0 0 0 0]
 [5 0 8 0]
 [0 0 0 9]
 [0 0 4 0]]
Process finished with exit code 0
  • csc_matrix
from scipy.sparse import csc_matrix
import numpy as np
row = np.array([1, 1, 3, 2])
col = np.array([0, 1, 1, 3, 4])
#将col列分为4段{0:1, 1:1, 1:3, 3:4},每段表示每一列有多少个数,具体来说就是第0列有1个数,第1列有0个数,第2列有2个数,第3列有1个数。
data= np.array([5, 8, 4, 9])
#结合row,col,则第0列的数(5)出现在第1行,第2列的数(8、4)分别出现在第1、3行,第3列的数(9)出现在第2行.
coo = csc_matrix((data, row, col), shape=(4, 4)).todense()
print(coo)

输出:

[[0 0 0 0]
 [5 0 8 0]
 [0 0 0 9]
 [0 0 4 0]]
Process finished with exit code 0
  • csr_matrix
from scipy.sparse import csr_matrix
import numpy as np
row = np.array([0, 0, 2, 3, 4])
##将row列分为4段{0:0, 0:2, 2:3, 3:4},每段表示每一列有多少个数,具体来说就是第0行有0个数,第1行有2个数,第2行有1个数,第3行有1个数。
col = np.array([0, 2, 3, 2]) # 注意与coo_matrix的col内的数值顺序不一样
data= np.array([5, 8, 9, 4]) # 注意与coo_matrix的data内的数值顺序不一样
#结合row,col,则第1行的数(5、8)出现在第0列和第2列,第2行的数(9)分别出现在第3列,第3行的数(4)出现在第2列.
coo = csr_matrix((data, col, row), shape=(4, 4)).toarray()
print(coo)

输出:

[[0 0 0 0]
 [5 0 8 0]
 [0 0 0 9]
 [0 0 4 0]]
Process finished with exit code 0

综上,coo_matrix、csc_matrix、csr_matrix三个函数可以得到一样的矩阵,只是方式不同。

  • 6
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值