scipy稀疏数组csr_array
文章目录
- csr_array
- 初始化方案
- 内置方法
csr_array
csr,即Compressed Sparse Row,是压缩稀疏行数组,就是将稀疏矩阵按行分割,并对这些列进行存储。
在稀疏矩阵中,有三个关键的编码数据,分别是data, indices和indptr。其中data为数据,indices为序号索引,二者是一一对应的。而intptr则对数据进行分割,表明其属于哪一列。
个中关系,举个例子就能明白
from scipy.sparse import csr_array
import numpy as npindptr = [0, 2, 3, 6]
indices = [0, 2, 2, 0, 1, 2]
data = [1,2,3,4,5,6]
csr = csr_array((data, indices, indptr))print(csr.toarray())
'''
[[1 0 2][0 0 3][4 5 6]]
'''
先看indptr,里面共有4个值,这4个值组成了3个区间[0,2), [2,3), [3,6),说明接下来要生成的矩阵共有3行。
然后在看三个区间对应的indices和data,以第0个区间[0,2)为例,对应的indices是0,2,对应的data是1,2,说明第0行的第0号是1、第2号是2,所以看上面的矩阵,第一行为 ( 1 , 0 , 2 ) T (1,0,2)^T (1,0,2)T;第1个区间为[2,3),对应的indices, data分别为2和3,说明第1行的第2个元素是3。
Matt Eding大神画了个图来说明这个过程

初始化方案
csr_array支持下面5种初始化方案,其中最后一种就是上面讲解的生成逻辑。后两种方法有参数shape,可以指定稀疏矩阵的维度,如果不指定,则生成满足要求的最小维度的稀疏矩阵。
csr_array(D)D是一个稀疏数组或 2 × D 2\times D 2×D数组csr_array(S)S是另一种稀疏数组csr_array((M, N),dtype='d')创建一个shape为 ( M , N ) (M, N) (M,N)的空数组,dtype为数据类型csr_array((data, ij))ij是坐标数组,可分解为i,j=ij,data是数据数组,设新矩阵为a,则a[i[k], j[k]] = data[k]csr_array((data, indices, indptr))
内置方法
稀疏数组在计算上并不便捷,所以csr_array中内置了下列函数,可以高效地完成计算。
| 函数 | expm1, log1p, sqrt, pow, sign |
| 三角函数 | sin, tan, arcsin, arctan, deg2rad, rad2deg |
| 双曲函数 | sinh, tanh, arcsinh, arctanh |
| 索引 | getcol, getrow, nonzero, argmax, argmin, max, min |
| 舍入 | ceil, floor, trunc |
| 变换 | conj, conjugate, getH |
| 统计 | count_nonzero, getnnz, mean, sum |
| 矩阵 | diagonal, trace |
| 获取属性 | get_shape, getformat |
| 计算比较 | multiply, dot, maximum, minimum |
| 转换 | asformat, asfptype, astype, toarray, todense |
| 转换 | tobsr, tocoo, tocsc, tocsr, todia, todok, tolil |
| 更改维度 | set_shape, reshape, resize, transpose |
| 排序 | sort_indices, sorted_indices |
| 移除元素 | eliminate_zeros, prune, sum_duplicates |
| 其他 | copy, check_format, getmaxprint, rint, setdiag |
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
