稀疏矩阵的定义(COO、CSC、CSR)-飞
发布时间: 2023-07-06
(1)Coordinate (COO)
>>> row = np.array([0, 3, 1, 0])>>> col = np.array([0, 3, 1, 2])>>> data = np.array([6, 5, 7, 8])&g(龙吸水是什么意思?中国跳高名将张国伟退役后经常在社交媒体上表演花式喝可乐,这个“绝活”被称为龙吸水。网友调侃张国伟是国家一级龙吸水运动员,也有网友称赞张国伟是龙吸水第一人。)t;>> sparse.coo_matrix((data, (row, col)), shape=(4, 4)).toarray()array([[6, 0, 8, 0],       [0, 7, 0, 0],       [0, 0, 0, 0],       [0, 0, 0, 5]])

这是最简单的一种格式,每一个元素需要用一个三元组来表示,分别是(行号,列号,数值),对应上图右边的一列。这种方式简单,但是记录单信息多(行列),每个三元组自己可以定位,因此空间不是最优。

(2)Compressed Sparse Column (CSC)
>>> indptr = np.array([0, 2, 3, 6])>>> indices = np.array([0, 2, 2, 0, 1, 2])>>> data = np.array([1, 2, 3, 4, 5, 6])>>> sparse.csc_matrix((data, indices, indptr), shape=(3, 3)).toarray()array([[1, 0, 4],       [0, 0, 5],       [2, 3, 6]])

CSC是按列存储一个稀疏矩阵的。其中indptr中的数据代表矩阵中每一列所存的数据在data中的开始和结束的索引,例如这里indptr为[0, 2, 3, 6],即表示在data中,索引[0, 2)为第一列的数据,索引[2, 3)为第二列的数据,索引[3, 6)为第三列的数据。而indices中的数据代表所对应的data中的数据在其所在列中的所在行数,例如,这里的indices为[0, 2, 2, 0, 1, 2],表示在data中,数据1在第0行,数据2在第2行,数据3在第2行,数据4在第0行,数据5在第一行,数据6在第2行。从而建立起一个稀疏矩阵。

(3)Compressed Sparse Row (CSR)
>>> indptr = np.array([0, 2, 3, 6])>>> indices = np.array([0, 2, 2, 0, 1, 2])>>> data = np.array([1, 2, 3, 4, 5, 6])>>> sparse.csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()array([[1, 0, 2],       [0, 0, 3],       [4, 5, 6]])

CSR是按行来存储一个稀疏矩阵的,其原理与CSC类似。indptr中的数据表示矩阵中每一行的数据在data中开始和结束的索引,而indices中的数据表示所对应的在data中的数据在矩阵中其所在行的所在列数。可以看出,在indptr、indices和data三个数组相同的情况下,通过CSC和CSR分别表示出来的矩阵互为转置关系。



扫码加微信详细咨询太和智慧养老产品和平台服务!

微信