Python scipy.sparse矩阵使用方法

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python scipy.sparse矩阵使用方法相关的知识,希望对你有一定的参考价值。

本文以csr_matrix为例来说明sparse矩阵的使用方法,其他类型的sparse矩阵可以参考https://docs.scipy.org/doc/scipy/reference/sparse.html

csr_matrix是Compressed Sparse Row matrix的缩写组合,下面介绍其两种初始化方法

csr_matrix((data, (row_ind, col_ind)), [shape=(M, N)])

  where datarow_ind and col_ind satisfy the relationship a[row_ind[k], col_ind[k]] data[k].

csr_matrix((data, indices, indptr), [shape=(M, N)])

  is the standard CSR representation where the column indices for row i are stored in indices[indptr[i]:indptr[i+1]] and their corresponding values are             stored in data[indptr[i]:indptr[i+1]]. If the shape parameter is not supplied, the matrix dimensions are inferred from the index arrays.

 

上述官方文档给出了:稀疏矩阵的参数及其含义、稀疏矩阵的构造方式。阐述形式简单明了,读起来令人赏心悦目。

 

Sparse matrices can be used in arithmetic operations: they support addition, subtraction, multiplication, division, and matrix power

Advantages of the CSR format

  • efficient arithmetic operations CSR + CSR, CSR * CSR, etc.
  • efficient row slicing
  • fast matrix vector products

Disadvantages of the CSR format

  • slow column slicing operations (consider CSC)
  • changes to the sparsity structure are expensive (consider LIL or DOK)

 

上述官方文档时稀疏矩阵的一些特性以及csr_matrix的优缺点,并且在指明各种缺点的同时,提供了可以考虑的技术实现。

 

代码示例1

import numpy as np
from scipy.sparse import csr_matrix

row = np.array([0, 0, 1, 2, 2, 2])
col = np.array([0, 2, 2, 0, 1, 2])
data = np.array([1, 2, 3, 4, 5, 6])
a = csr_matrix((data, (row, col)), shape=(3, 3)).toarray()

print(a)

运行结果:

array([[1, 0, 2],
       [0, 0, 3],
       [4, 5, 6]])

代码示例2

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])
a = csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()

print(a)

允许结果:

array([[1, 0, 2],
       [0, 0, 3],
       [4, 5, 6]])

 

上述两个代码示例也是摘自官方文档,表明了每种初始化方式的简单实现,给应用这种初始化方式的人很大启发。

 

总结:官方文档其实是很好的书写程序文档范例,欣赏她,模仿她,然后在实际中应用她...





以上是关于Python scipy.sparse矩阵使用方法的主要内容,如果未能解决你的问题,请参考以下文章

Scipy sparse的CSC矩阵总结

使用 scipy.sparse.bmat 从子块创建非常大的稀疏矩阵时出错

如何从一个巨大的(scipy.sparse)矩阵计算对角矩阵?

Scipy---6.稀疏矩阵

python稀疏矩阵得到每列最大k项的值,对list内为类对象的排序(scipy.sparse.csr.csr_matrix)

scipy.sparse 矩阵的元素功率