① scipy常见数据结构:coo_matrix、csc_matrix与csr_matrix
coo_matrix全称是A sparse matrix in COOrdinate format,一种基于坐标格式的稀疏矩阵,每一个矩阵项是一个三元组(行,列,值)。
该矩阵的常见构造方法有如下几种:
输出为:
使用稠密二维数组构造
输出为:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=int8)
输出为:
array([[4, 0, 9, 0],
[0, 7, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 5]])
如果行列坐标有重复,对应的值直接累加,举例如下:
输出为:
array([[3, 0, 1, 0],
[0, 2, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 1]])
csr是Compressed Sparse Row matrix的缩写即压缩稀疏基于行存储的矩阵,好绕口,该矩阵有如下几种构造方法:
输出为:
输出为:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=int8)
输出为:
array([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
按行存储,即先存储第0行,然后第1行,依次到最后一行,即先扫描row数组的数据,第一个数据是0即第0行,然后扫描col的第一个数据是0即第0列,那么第0行第0列存储的值就是data的第一个数据即1,然后继续扫描row的第二个数据还是0即还是第0行,col对应的第二个数据是2即第2列,data的第二个数据是2,即第0行第2列的数据是2,依次扫描row,找对应的col和data构造稀疏矩阵。
输出为:
array([[1, 0, 2],
[0, 0, 3],
[4, 5, 6]])
csc是Compressed Sparse Column matrix的缩写即基于列存储的压缩稀疏矩阵,该矩阵有如下几种构造方法:
输出如下:
和前面的csr的输出对比可以看出该矩阵是按列逐个存储。
输出如下:
array([[0, 0, 0, 0],
[0, 0, 0, 0],
[0, 0, 0, 0]], dtype=int8)
输出如下:
array([[1, 0, 4],
[0, 0, 5],
[2, 3, 6]])
输出如下:
array([[1, 0, 4],
[0, 0, 5],
[2, 3, 6]])
coo_matrix由于构造方便容易理解,所以通常都是先构造该矩阵然后调用tocsr和tocsc函数来获取另外两种矩阵的存储。
csr_matrix支持快速的按行切片,而csc_matrix则支持快速按列切片操作。