iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >numpy稀疏矩阵的实现
  • 582
分享到

numpy稀疏矩阵的实现

2024-04-02 19:04:59 582人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

目录1. coo存储方式2. dok_matrix3. csr和csc存储方式4. lil_matrix5. dia_matrix6. 稀疏矩阵经验1. coo存储方式 采用三元组(

1. coo存储方式

采用三元组(row, col, data)(或称为ijv fORMat)的形式来存储矩阵中非零元素的信息。

coo_matrix的优点:有利于稀疏格式之间的快速转换(tobsr()、tocsr()、to_csc()、to_dia()、to_dok()、to_lil();允许重复项(格式转换的时候自动相加);能与CSR / CSC格式的快速转换

coo_matrix的缺点:不能直接进行算术运算,包括赋值

在这里插入图片描述

初始化方式:

coo_matrix(D), D代表密集矩阵

赋值:

>>> import numpy as np
>>> from scipy.sparse import coo_matrix

>>> _row  = np.array([0, 3, 1, 0])
>>> _col  = np.array([0, 3, 1, 2])
>>> _data = np.array([4, 5, 7, 9])
>>> coo = coo_matrix((_data, (_row, _col)), shape=(4, 4), dtype=np.int)
>>> coo.todense()  # 通过toarray方法转化成密集矩阵(numpy.matrix)
>>> coo.toarray()  # 通过toarray方法转化成密集矩阵(numpy.ndarray)
array([[4, 0, 9, 0],
       [0, 7, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 5]])

2. dok_matrix

​ dok_matrix,即Dictionary Of Keys based sparse matrix,是一种类似于coo matrix但又基于字典的稀疏矩阵存储方式,key由非零元素的的坐标值tuple(row, column)组成,value则代表数据值。dok matrix非常适合于增量构建稀疏矩阵,并一旦构建,就可以快速地转换为coo_matrix。

>>> import numpy as np
>>> from scipy.sparse import dok_matrix

>>> np.random.seed(10)
>>> matrix = random(3, 3, format='dok', density=0.4)
>>> matrix[1, 1] = 33
>>> matrix[2, 1] = 10
>>> matrix.toarray()
array([[ 0.        ,  0.        ,  0.        ],
       [ 0.        , 33.        ,  0.        ],
       [ 0.19806286, 10.        ,  0.22479665]])
>>> dict(matrix)
{(2, 0): 0.19806286475962398, (2, 1): 10.0, (2, 2): 0.22479664553084766, (1, 1): 33.0}

>>> isinstance(matrix, dict)
True

3. csr和csc存储方式

csr_matrix,全称Compressed Sparse Row matrix,即按行压缩的稀疏矩阵存储方式,由三个一维数组indptr, indices, data组成。这种格式要求矩阵元「按行顺序存储」,「每一行中的元素可以乱序存储」。那么对于每一行就只需要用一个指针表示该行元素的起始位置即可。indptr存储每一行数据元素的起始位置,indices这是存储每行中数据的列号,与data中的元素一一对应。
csr_matrix,是按列压缩,不再赘述

在这里插入图片描述

csr_matrix的优点:
高效的算术运算CSR + CSR,CSR * CSR等
高效的行切片
快速矩阵运算

csr_matrix的缺点:
列切片操作比较慢(考虑csc_matrix)
稀疏结构的转换比较慢(考虑lil_matrix或doc_matrix)

>>> import numpy as np
>>> from scipy.sparse import csr_matrix

>>> 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])
>>> csr = csr_matrix((data, indices, indptr), shape=(3, 3)).toarray()
array([[1, 0, 2],
       [0, 0, 3],
       [4, 5, 6]])

4. lil_matrix

lil_matrix,即List of Lists format,又称为Row-based linked list sparse matrix。它使用两个嵌套列表存储稀疏矩阵:data保存每行中的非零元素的值,rows保存每行非零元素所在的列号(列号是顺序排序的)。
LIL matrix本身的设计是用来方便快捷构建稀疏矩阵实例,而算术运算、矩阵运算则转化成CSC、CSR格式再进行,构建大型的稀疏矩阵还是推荐使用COO格式。

在这里插入图片描述

5. dia_matrix

​ dia_matrix,全称Sparse matrix with DIAGonal storage,是一种对角线的存储方式。如下图中,将稀疏矩阵使用offsets和data两个矩阵来表示。

在这里插入图片描述

>>> data = np.arange(15).reshape(3, -1) + 1
>>> offsets = np.array([0, -3, 2])
>>> dia = sparse.dia_matrix((data, offsets), shape=(7, 5))
>>> dia.toarray()
array([[ 1,  0, 13,  0,  0],
       [ 0,  2,  0, 14,  0],
       [ 0,  0,  3,  0, 15],
       [ 6,  0,  0,  4,  0],
       [ 0,  7,  0,  0,  5],
       [ 0,  0,  8,  0,  0],
       [ 0,  0,  0,  9,  0]])

6. 稀疏矩阵经验

要有效地构造矩阵,请使用dok_matrix或lil_matrix
lil_matrix类支持基本切片和花式索引,其语法与NumPy Array类似;lil_matrix形式是基于row的,因此能够很高效的转为csr,但是转为csc效率相对较低。
要执行乘法或转置等操作,首先将矩阵转换为CSC或CSR格式,效率高
CSR格式特别适用于快速矩阵矢量产品
CSR,CSC和COO格式之间的所有转换都是线性复杂度。

到此这篇关于numpy稀疏矩阵的实现的文章就介绍到这了,更多相关numpy 稀疏矩阵内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: numpy稀疏矩阵的实现

本文链接: https://www.lsjlt.com/news/119940.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • numpy稀疏矩阵的实现
    目录1. coo存储方式2. dok_matrix3. csr和csc存储方式4. lil_matrix5. dia_matrix6. 稀疏矩阵经验1. coo存储方式 采用三元组(...
    99+
    2022-11-11
  • C++稀疏矩阵怎么实现
    这篇文章主要讲解了“C++稀疏矩阵怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++稀疏矩阵怎么实现”吧!稀疏矩阵矩阵与稀疏矩阵的定义Q:什么是矩阵A:数学上,一个矩阵由 m 行 ...
    99+
    2023-06-30
  • Scipy稀疏矩阵bsr_array的使用
    目录基本原理初始化内置方法基本原理 bsr,即Block Sparse Row,bsr_array即块稀疏行矩阵,顾名思义就是将稀疏矩阵分割成一个个非0的子块,然后对这些子块进行存储...
    99+
    2023-02-21
    Scipy稀疏矩阵bsr_array Scipy稀疏矩阵 Scipy bsr_array
  • C++超详细讲解稀疏矩阵
    目录稀疏矩阵矩阵与稀疏矩阵的定义稀疏矩阵的转置详细思路思路一思路二稀疏矩阵的乘法详细思路稀疏矩阵 矩阵与稀疏矩阵的定义 Q:什么是矩阵 A:数学上,一个矩阵由 m 行 n 列的元素组...
    99+
    2022-11-13
  • Scipy稀疏矩阵bsr_array如何使用
    本篇内容主要讲解“Scipy稀疏矩阵bsr_array如何使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Scipy稀疏矩阵bsr_array如何使用”吧!基本原理bsr,即Block Spa...
    99+
    2023-07-05
  • python的高级数组之稀疏矩阵
      稀疏矩阵的定义: 具有少量非零项的矩阵(在矩阵中,若数值0的元素数目远多于非0元素的数目,并且非0元素分布没有规律时,)则称该矩阵为稀疏矩阵;相反,为稠密矩阵。非零元素的总数比上矩阵所有元素的总数为矩阵的稠密度。 稀疏矩阵的两个动...
    99+
    2023-01-31
    稀疏 数组 矩阵
  • python scipy 稀疏矩阵的使用说明
    稀疏矩阵格式 coo_matrix coo_matrix 是最简单的稀疏矩阵存储方式,采用三元组(row, col, data)(或称为ijv format)的形式来存储矩阵中非零元素的信息。 在实际使用中,一般...
    99+
    2022-06-02
    python scipy 稀疏矩阵
  • Python实现两种稀疏矩阵的最小二乘法
    目录最小二乘法返回值测试最小二乘法 scipy.sparse.linalg实现了两种稀疏矩阵最小二乘法lsqr和lsmr,前者是经典算法,后者来自斯坦福优化实验室,据称可以比lsqr...
    99+
    2023-02-26
    Python稀疏矩阵最小二乘法 Python稀疏矩阵 Python 最小二乘法
  • Python 如何解决稀疏矩阵运算
    用Python求解微分线性方程 因为之前用matlab也编写过,所以前不久试着用python写,感觉之间互通点也蛮多的,易理解。 题目:稀疏线性方程组的求解方法 简单的方程如: AX...
    99+
    2022-11-12
  • Python稀疏矩阵scipy.sparse包使用详解
    目录1. 前言2. 导入包3. 稀疏矩阵总览4. 稀疏矩阵详细介绍4.1 coo_matrix4.2 dok_matrix4.3 lil_matrix4.4 dia_matrix4....
    99+
    2023-02-16
    Python稀疏矩阵 Python scipy.sparse包
  • java实现稀疏矩阵的压缩与解压的方法
    目录任务要求思路分析稀疏矩阵的压缩稀疏矩阵的解压代码实现任务要求 把棋盘当作一个稀疏矩阵,0表示没棋,1表示黑棋,2表示蓝棋。 把该稀疏矩阵压缩以三元组形式表示并以文件形式保存,再写...
    99+
    2022-11-13
  • Python如何实现两种稀疏矩阵的最小二乘法
    今天小编给大家分享一下Python如何实现两种稀疏矩阵的最小二乘法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。最小二乘法s...
    99+
    2023-07-05
  • 华为OD机试 - 矩阵稀疏扫描(Java & JS & Python)
    题目描述 如果矩阵中的许多系数都为零,那么该矩阵就是稀疏的。对稀疏现象有兴趣是因为它的开发可以带来巨大的计算节省,并且在许多大的实践中都会出现矩阵稀疏的问题。 给定一个矩阵,现在需要逐行和逐列地扫描矩阵,如果某一行或者某一列内,存在连续出现...
    99+
    2023-09-01
    算法 华为机试 Java JavaScript Python
  • numpy拼接矩阵的实现
    目录1、文档2、举例1、文档 使用numpy的 concatenate 拼接矩阵,文档里面这样解释: numpy.concatenate((a1, a2, ...), axis=0,...
    99+
    2022-11-11
  • NumPy矩阵乘法的实现
    目录NumPy矩阵乘法逐元素矩阵乘法矩阵乘积运算矩阵点积NumPy矩阵乘法 矩阵乘法是将两个矩阵作为输入值,并将 A 矩阵的行与 B 矩阵的列对应位置相乘再相加,从而生成一个新矩阵,...
    99+
    2023-02-10
    NumPy矩阵乘法
  • Numpy创建NumPy矩阵的简单实现
    目录创建NumPy矩阵1. 创建矩阵2. 创建分块矩阵3. 矩阵计算4. 矩阵属性创建NumPy矩阵 NumPy对于多维数组的运算,默认情况下并不进行矩阵运算。如果需要对数组进行矩阵...
    99+
    2023-02-10
    Numpy创建NumPy矩阵 Numpy创建矩阵
  • 【华为OD统一考试B卷 | 100分】矩阵稀疏扫描(C++ Java JavaScript Python)
    华为OD在线OJ 已购买本专栏用户,请私信博主开通账号,在线刷题!!! 在线OJ:立即刷题 题库专栏:2023华为OD机试(A卷+B卷)(C++JavaJSPy) 题目描述 如果矩阵中的许多系数都为零...
    99+
    2023-10-05
    矩阵 c++ java python 华为
  • NumPy 矩阵乘法的实现示例
    NumPy 支持的几类矩阵乘法也很重要。 元素级乘法 你已看过了一些元素级乘法。你可以使用 multiply 函数或 * 运算符来实现。回顾一下,它看起来是这样的: m = n...
    99+
    2022-11-11
  • NumPy如何实现矩阵乘法
    这篇文章主要介绍NumPy如何实现矩阵乘法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!NumPy 支持的几类矩阵乘法也很重要。元素级乘法你已看过了一些元素级乘法。你可以使用 multiply 函数或 * 运算符来实...
    99+
    2023-06-14
  • scipy稀疏数组coo_array的实现
    目录coo_array初始化方案内置方法coo_array coo也被称为ijv,是一种三元组格式,对于矩阵中第i ii行第j jj列的值v vv,将其存储为( i , j , v ...
    99+
    2023-02-21
    scipy稀疏数组coo_array scipy稀疏数组
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作