网站建设的市场,公共交易中心招标网,桂林人论坛,用户界面设计的重要性文章目录基本原理初始化内置方法基本原理
bsr#xff0c;即Block Sparse Row#xff0c;bsr_array即块稀疏行矩阵#xff0c;顾名思义就是将稀疏矩阵分割成一个个非0的子块#xff0c;然后对这些子块进行存储。通过输入维度#xff0c;可以创建一个空的bsr数组#xff0…
文章目录基本原理初始化内置方法基本原理
bsr即Block Sparse Rowbsr_array即块稀疏行矩阵顾名思义就是将稀疏矩阵分割成一个个非0的子块然后对这些子块进行存储。通过输入维度可以创建一个空的bsr数组但bsr格式并不可见需要通过toarray转为数组才能一窥全貌。
from scipy.sparse import bsr_array
import numpy as np
import sys
bsr bsr_array((100, 200), dtypenp.int8)
sys.getsizeof(bsr) # 48
bsr_arr bsr.toarray() # 转为数组
sys.getsizeof(bsr_arr) # 20120egtsizeof可查看数据占用的内存其中bsr占用48byte转为数组之后占据20k这就是稀疏矩阵存在的价值。
当然全零的数组就直接叫全零数组得了直接存个行列数比bsr还省事儿接下来构造一个矩阵
from numpy.random import randint, rand
tmp np.zeros([200,200])
for i in range(30):x, y randint(195, size(2))tmp[x:x5, y:y5]rand(5,5)print(tmp.size) # 40000
bsr bsr_array(tmp, blocksize(5,5))
print(bsr.data.size) # 2850
print(bsr.indptr.size) # 41
print(bsr.indices.size) # 114
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×D2\times 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,jijdata是数据数组设新矩阵为a则a[i[k], j[k]] data[k]bsr_array((data, indices, indptr))
前四种方法均有参数blocksize为块尺寸后两种方法均有参数shape为稀疏矩阵的维度。
从原理上来说通过data, indices, indptr来创建的bsr数组属于原生的bsr数组其创建规则就是前文提到的复原规则。
内置方法
稀疏数组在计算上并不便捷所以bsr_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