首页 快讯正文

联博api:scipy.sparse的一些整理

admin 快讯 2020-05-25 15 0

一、scipy.sparse中七种希罕矩阵类型

1、bsr_matrix:分块压缩希罕行花样

  • 先容

  BSR矩阵中的inptr列表的第i个元素与i+1个元素是储存第i行的数据的列索引以及数据的区间索引,即indices[indptr[i]:indptr[i+1]]为第i行元素的列索引,data[indptr[i]: indptr[i+1]]为第i行元素的data。

  在下面的例子中,对于第0行,indptr[0]:indptr[1] -> 0:2,因此第0行的列为indice[0:2]=[0,2],data为data[0:2]=array([[[1, 1],[1, 1]],[[2, 2],[2, 2]]]),对应的就是最后效果的第0,1行。

  • 优点

  和压缩希罕行花样(CSR)很相似,然则BSR更适合于有密集子矩阵的希罕矩阵,分块矩阵通常出现在向量值有限的离散元中,在这种情景下,比CSR和CSC算术操作更有用。

  • 示例

indptr = np.array([0, 2, 3, 6])
indices = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6]).repeat(4).reshape(6, 2, 2)
bsr_mat=bsr_matrix((data,indices,indptr), shape=(6, 6)).toarray()

输出:
'''
[[1 1 0 0 2 2]
 [1 1 0 0 2 2]
 [0 0 0 0 3 3]
 [0 0 0 0 3 3]
 [4 4 5 5 6 6]
 [4 4 5 5 6 6]]
'''

2、coo_matrix是可以凭据行和列索引举行data值的累加

  • 先容

 

  坐标形式的一种希罕矩阵。接纳三个数组row、col和data保留非零元素的信息。这三个数组的长度相同,row保留元素的行,col保留元素的列,data保留元素的值。许多希罕矩阵的数据都是接纳这种花样保留在文件中的,例如某个CSV文件中可能有这样三列:“用户ID,商品ID,评价值”。接纳numpy.loadtxt或pandas.read_csv将数据读入之后,可以通过coo_matrix快速将其转换成希罕矩阵:矩阵的每行对应一位用户,每列对应一件商品,而元素值为用户对商品的评价。

 

  • 优点

  便利快捷的在差别希罕花样间转换;允许重复录入,允许重复的元素;从CSR\CSC花样转换异常快速。

  • 瑕玷

  不能直接举行科学盘算和切片操作;不支持元素的存取和增删,一旦建立之后,除了将之转换成其它花样的矩阵,险些无法对其做任何操作和矩阵运算。

row  = np.array([0, 0, 1, 3, 1, 0, 0])
col  = np.array([0, 2, 1, 3, 1, 0, 0])
data = np.array([1, 1, 1, 1, 1, 1, 1])
coo_mat=coo_matrix((data, (row, col)), shape=(4, 4)).toarray()
输出:
'''
[[3 0 1 0]
 [0 2 0 0]
 [0 0 0 0]
 [0 0 0 1]]
'''

3、csc_matrix

  • 先容

  csc_matrix的初始化方式可以是bsr_matrix的初始化方式,也可以是coo_matrix的初始化方式

  • 优瑕玷:

  高效的CSC +CSC, CSC * CSC算术运算;高效的列切片操作。然则矩阵内积操作没有CSR, BSR快;行切片操作慢(相比CSR);希罕结构的转变代价高(相比LIL 或者 DOK)。

row  = np.array([0, 0, 1, 3, 1, 0, 0])
col  = np.array([0, 2, 1, 3, 1, 0, 0])
data = np.array([1, 1, 1, 1, 1, 1, 1])
csc_mat=csc_matrix((data, (row, col)), shape=(4, 4)).toarray()
输出:
'''
[[3 0 1 0]
 [0 2 0 0]
 [0 0 0 0]
 [0 0 0 1]]
'''

4、csr_matrix

  • 先容

  csr_matrix的初始化与csc_matrix一致。

  • 优瑕玷

  高效的CSR + CSR, CSR *CSR算术运算;高效的行切片操作;高效的矩阵内积内积操作。然则列切片操作慢(相比CSC);希罕结构的转变代价高(相比LIL 或者 DOK)。CSR花样在存储希罕矩阵时非零元素平均使用的字节数(Bytes per Nonzero Entry)最为稳固(float类型约为8.5,double类型约为12.5)。CSR花样常用于读入数据后举行希罕矩阵盘算。

row  = np.array([0, 0, 1, 3, 1, 0, 0])
col  = np.array([0, 2, 1, 3, 1, 0, 0])
data = np.array([1, 1, 1, 1, 1, 1, 1])
csr_mat=csr_matrix((data, (row, col)), shape=(4, 4)).toarray()
输出:
'''
[[3 0 1 0]
 [0 2 0 0]
 [0 0 0 0]
 [0 0 0 1]]
'''

5、dia_matrix

  • 先容

  data界说对角线元素,在这里是[1,2,3,4]。

  offsets界说对角线的偏移量,0代表正对角线,正数代表往上偏移,负数代表往下偏移。

  • 优瑕玷

  对角存储花样(DIA)和ELL花样在举行希罕矩阵-矢量乘积(sparse matrix-vector products)时效率最高,以是它们是应用迭代法(如共轭梯度法)解希罕线性系统最快的花样;DIA花样存储数据的非零元素平均使用的字节数与矩阵类型有较大关系,适合于StructuredMesh结构的希罕矩阵(float类型约为4.05,double类型约为8.10)。对于Unstructured Mesh以及Random Matrix,DIA花样使用的字节数是CSR花样的十几倍。

data = np.array([[1, 2, 3, 4]]).repeat(3, axis=0)
offsets = np.array([0, -1, 2])
dia_mat=dia_matrix((data, offsets), shape=(4, 4)).toarray()
输出:
'''
[[1 0 3 0]
 [1 2 0 4]
 [0 2 3 0]
 [0 0 3 4]]
'''

6、dok_matrix

  • 先容

  dok_matrix从dict继续,它接纳字典保留矩阵中不为0的元素:字典的键是一个保留元素(行,列)信息的元组,其对应的值为矩阵中位于(行,列)中的元素值。

  • 优瑕玷

  显然字典花样的希罕矩阵很适合单个元素的添加、删除和存取操作。通常用来逐渐添加非零元素,然后转换成其它支持快速运算的花样。

S = dok_matrix((5, 5), dtype=np.int)
for i in range(5):
    for j in range(5):
        S[i, j] = i + j
输出:
'''
[[0 1 2 3 4]
 [1 2 3 4 5]
 [2 3 4 5 6]
 [3 4 5 6 7]
 [4 5 6 7 8]]
'''

7、lil_matrix

  • 先容

  基于行毗邻存储的希罕矩阵。lil_matrix使用两个列表保留非零元素。data保留每行中的非零元素,rows保留非零元素所在的列。

  • 优瑕玷

  这种花样也很适合逐个添加元素,并且能快速获取行相关的数据。

 

l = lil_matrix((6,5))
l[2,3] = 1
l[3,4] = 2
l[3,2] = 3
print (l.toarray())
print(l.data)
print(l.rows)

输出
'''
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 1. 0.]
 [0. 0. 3. 0. 2.]
 [0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]
[list([]) list([]) list([1.0]) list([3.0, 2.0]) list([]) list([])]
[list([]) list([]) list([3]) list([2, 4]) list([]) list([])]

 

二、scipy.sparse中的矩阵函数

  下面我只列出对照有用的函数,其他的函数可以参见scipy.sparse官网。

组织函数

  • eye(m[, n, k, dtype, format]):对角线为1的希罕矩阵
  • identity(n[, dtype, format]):单位矩阵
  • diags(diagonals[, offsets, shape, format, dtype]):组织对角矩阵(含偏移量)
  • spdiags(data, diags, m, n[, format]):从矩阵中返回含偏移量的对角希罕矩阵
  • hstack(blocks[, format, dtype]) Stack sparse matrices horizontally (column wise) :在竖直方向上堆叠
  • vstack(blocks[, format, dtype]) Stack sparse matrices vertically (row wise):在水平方向上平铺

判别函数

  • issparse(x):x是否为sparse类型
  • isspmatrix(x):x是否为sparse类型
  • isspmatrix_csc(x):x是否为csc_matrix类型
  • isspmatrix_csr(x):x是否为csr_matrix类型
  • isspmatrix_bsr(x):x是否为bsr_matrix类型
  • isspmatrix_lil(x):x是否为lil_matrix类型
  • isspmatrix_dok(x):x是否为dok_matrix类型
  • isspmatrix_coo(x):x是否为coo_matrix类型
  • isspmatrix_dia(x):x是否为dia_matrix类型

其他有用函数

  • save_npz(file, matrix[, compressed]):以.npz花样保留希罕矩阵
  • load_npz(file):导入.npz花样的希罕矩阵
  • find(A):返回希罕矩阵A中的非零元的位置以及数值

scipy.sparse中的作用在矩阵的内函数

  下面的函数只针对csr_matrix列出,其他希罕矩阵花样的函数也类似,详细可以查看对应希罕矩阵的说明文档下面的函数说明部门。

针对元素的函数

  内函数中有许多作用在矩阵元素的函数,下面列出一些函数。- arcsin():每个元素举行arcsin运算

  - floor():每个元素举行floor运算

  - sqrt():每个元素举行sqrt运算

  - maximum(other):对照希罕矩阵与other矩阵的每个元素,返回最大值

转化函数

  • todense([order, out]):返回希罕矩阵的np.matrix形式
  • toarray([order, out]):返回希罕矩阵的np.array形式
  • tobsr([blocksize, copy]):返回希罕矩阵的bsr_matrix形式
  • tocoo([copy]):返回希罕矩阵的coo_matrix形式
  • tocsc([copy]):返回希罕矩阵的csc_matrix形式
  • tocsr([copy]):返回希罕矩阵的csr_matrix形式
  • todia([copy]):返回希罕矩阵的dia_matrix形式
  • todok([copy]):返回希罕矩阵的dok_matrix形式
  • tolil([copy]):返回希罕矩阵的lil_matrix形式

其他函数

  • get_shape():返回希罕矩阵的维度max([axis, out]):返回希罕矩阵沿着某个轴的最大值
  • reshape(self, shape[, order, copy]):将希罕矩阵的维度重构
  • diagonal([k]):返回第k个对角元素,然则在我的python3版本中k不起作用。
  • dot(other):与other矩阵的矩阵乘法

 

————————————————
参考文献:

https://blog.csdn.net/qq_33466771/article/details/80304498

https://blog.csdn.net/ChenglinBen/article/details/84424379

https://www.cnblogs.com/YangZnufe/p/8413374.html

https://blog.csdn.net/CY_TEC/article/details/106074237

,

Sunbet

www.ipvps.cn信誉来自于每一位客户的口碑,Sunbet携手江苏安腾科技有限公将致力服务好每位Sunbet会员。!

版权声明

本文仅代表作者观点,
不代表本站诚信在线的立场。
本文系作者授权发表,未经许可,不得转载。