Scipy稀疏矩阵bsr_array如何使用

其他教程   发布日期:2023年06月28日   浏览次数:648

本篇内容主要讲解“Scipy稀疏矩阵bsr_array如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scipy稀疏矩阵bsr_array如何使用”吧!

基本原理

bsr,即Block Sparse Row,bsr_array即块稀疏行矩阵,顾名思义就是将稀疏矩阵分割成一个个非0的子块,然后对这些子块进行存储。通过输入维度,可以创建一个空的bsr数组,但bsr格式并不可见,需要通过toarray转为数组,才能一窥全貌。

  1. from scipy.sparse import bsr_array
  2. import numpy as np
  3. import sys
  4. bsr = bsr_array((100, 200), dtype=np.int8)
  5. sys.getsizeof(bsr) # 48
  6. bsr_arr = bsr.toarray() # 转为数组
  7. sys.getsizeof(bsr_arr) # 20120

egtsizeof可查看数据占用的内存,其中bsr占用48byte,转为数组之后占据20k,这就是稀疏矩阵存在的价值。

当然,全零的数组就直接叫全零数组得了,直接存个行列数比bsr还省事儿,接下来构造一个矩阵

  1. from numpy.random import randint, rand
  2. tmp = np.zeros([200,200])
  3. for i in range(30):
  4. x, y = randint(195, size=(2))
  5. tmp[x:x+5, y:y+5]=rand(5,5)
  6. print(tmp.size) # 40000
  7. bsr = bsr_array(tmp, blocksize=(5,5))
  8. print(bsr.data.size) # 2850
  9. print(bsr.indptr.size) # 41
  10. print(bsr.indices.size) # 114
  11. print(tmp.size)

bsr.data是bsr中存放的矩阵块;bsr.indices为这些矩阵块对应的列号数组;bsr.indptr为索引的行分割数组;这些零零碎碎加在一起也只有3005个数,和40k的tmp相比,可以说压缩效率非常高了。

通过data, indptr和indices,可以将bsr复原为矩阵。首先,列号和数据是一一对应的;其次indptr对索引和数据按行分割。在本例中,indptr的值为0, 2, 6, 8…,则data[0:2]存放在第0行,对应的列号为indices[0:2];data[2:6]存放在第1行,对应的列号为indices[2:6],以此类推。

初始化

bsr_array共有5种初始化方案:

  • bsr_array(D) D是一个稀疏数组或2 × D 2 imes D2×D数组

  • bsr_array(S) S是另一种稀疏数组

  • bsr_array((M, N),dtype) 创建一个shape为( M , N ) (M, N)(M,N)的空数组,dtype为数据类型

  • bsr_array((data, ij)) ij是坐标数组,可分解为i,j=ij,data是数据数组,设新矩阵为a,则a[i[k], j[k]] = data[k]

  • bsr_array((data, indices, indptr))

前四种方法均有参数blocksize,为块尺寸;后两种方法均有参数shape,为稀疏矩阵的维度。

从原理上来说,通过data, indices, indptr来创建的bsr数组,属于"原生"的bsr数组,其创建规则就是前文提到的复原规则。

内置方法

稀疏数组在计算上并不便捷,所以bsr_array中内置了下列函数,可以高效地完成计算。



函数
  1. expm1
,
  1. log1p
,
  1. sqrt
,
  1. pow
,
  1. sign
三角函数
  1. sin
,
  1. tan
,
  1. arcsin
,
  1. arctan
,
  1. deg2rad
,
  1. rad2deg
双曲函数
  1. sinh
,
  1. tanh
,
  1. arcsinh
,
  1. arctanh
索引
  1. getcol
,
  1. getrow
,
  1. nonzero
,
  1. argmax
,
  1. argmin
,
  1. max
,
  1. min
舍入
  1. ceil
,
  1. floor
,
  1. trunc
变换
  1. conj
,
  1. conjugate
,
  1. getH
统计
  1. count_nonzero
,
  1. getnnz
,
  1. mean
,
  1. sum
矩阵
  1. diagonal
,
  1. trace
获取属性
  1. get_shape
,
  1. getformat
计算比较
  1. multiply
,
  1. dot
,
  1. maximum
,
  1. minimum
转换
  1. asformat
,
  1. asfptype
,
  1. astype
,
  1. toarray
,
  1. todense
转换
  1. tobsr
,
  1. tocoo
,
  1. tocsc
,
  1. tocsr
,
  1. todia
,
  1. todok
,
  1. tolil
更改维度
  1. set_shape
,
  1. reshape
,
  1. resize
,
  1. transpose
排序
  1. sort_indices
,
  1. sorted_indices
移除元素
  1. eliminate_zeros
,
  1. prune
,
  1. sum_duplicates
其他
  1. copy
,
  1. check_format
,
  1. getmaxprint
,
  1. rint
,
  1. setdiag

以上就是Scipy稀疏矩阵bsr_array如何使用的详细内容,更多关于Scipy稀疏矩阵bsr_array如何使用的资料请关注九品源码其它相关文章!