scipy稀疏数组csr_array

文章目录

    • csr_array
    • 初始化方案
    • 内置方法

csr_array

csr,即Compressed Sparse Row,是压缩稀疏行数组,就是将稀疏矩阵按行分割,并对这些列进行存储。

在稀疏矩阵中,有三个关键的编码数据,分别是data, indicesindptr。其中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行。

然后在看三个区间对应的indicesdata,以第0个区间[0,2)为例,对应的indices0,2,对应的data1,2,说明第0行的第0号是1、第2号是2,所以看上面的矩阵,第一行为 ( 1 , 0 , 2 ) T (1,0,2)^T (1,0,2)T;第1个区间为[2,3),对应的indices, data分别为23,说明第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=ijdata是数据数组,设新矩阵为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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部