- 三种函数的英文全名,首先是从表面意思上入手。
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三个函数可以得到一样的矩阵,只是方式不同。