关于Pytorch和Numpy中的稀疏矩阵sparse的知识点
Pytorch和Numpy中的稀疏矩阵sparse
- 0 稀疏矩阵类别
- 0.1 coo_matrix
- 0.2 dok_matrix
- 0.3 csr_matrix
- 0.4 csc_matrix
- 0.5 bsr_matrix
- 0.6 bsc_matrix
- 0.7 lil_matrix
- 0.8 dia_matrix
- 1 pytorch中的稀疏矩阵
- 1.1 to_sparse()
- 1.2 to_sparse_csr()
- 1.3 sparse_coo_tensor()
- 1.4 sparse_csr_tensor()
- 1.5 sparse.sum()
- 1.6 sparse.mm()
- 2 numpy中的稀疏矩阵
- 参考博文及感谢
写在前面,pytorch和numpy都有对稀疏矩阵的操作,最大的区别在于pytorch可以通过GPU进行加速;不过现在numpy这边也推出了智能AI来加速对稀疏矩阵的运算;下面就稍微梳理一下关于稀疏矩阵的相关知识点,以飨诸君~
0 稀疏矩阵类别
不管是pytorch还是numpy,他们对稀疏矩阵的处理都是根据稀疏矩阵类别来的;所以先简单介绍稀疏矩阵的类别,这里网上已经有大量针对这些类别的详细解释说明,我这边就做引用:
SciPy 中不同稀疏矩阵存储方式介绍 (这个博客经常更换地址,而且加载不出图;但是是原创,所以贴出来);
不同稀疏矩阵存储方式介绍(这是对上面博客的CSDN转载,可看图)。
0.1 coo_matrix
对角存储矩阵(Coordinate Matrix)的简称
优:
能与CSR / CSC格式的快速转换
(tobsr()、tocsr()、to_csc()、to_dia()、to_dok()、to_lil())
缺:
不支持切片和算术运算操作
0.2 dok_matrix
按键字典矩阵(Dictionary of Keys Matrix)的简称
优:
对于递增的构建稀疏矩阵很高效,比如定义该矩阵后,想进行每行每列更新值,可用该矩阵。
可以高效访问单个元素,只需要O(1)
缺:
不允许重复索引(coo中适用),但可以很高效的转换成coo后进行重复索引
0.3 csr_matrix
压缩稀疏行矩阵(Compressed Sparse Row Matrix )的简称
优:
高效的稀疏矩阵算术运算
快速地矩阵矢量积运算
缺:
转换到稀疏结构代价较高(可以考虑LIL,DOK)
0.4 csc_matrix
压缩稀疏列矩阵(Compressed Sparse Column Matrix )的简称
优缺:
同上
0.5 bsr_matrix
分块压缩稀疏行矩阵(Block Sparse Row Matrix )的简称
优:
更适合于适用于具有密集子矩阵的稀疏矩阵
0.6 bsc_matrix
分块压缩稀疏列矩阵(Block Sparse Column Matrix )的简称
优:
更适合于适用于具有密集子矩阵的稀疏矩阵
0.7 lil_matrix
链表矩阵(Linked List Matrix )的简称
优:
适合递增的构建成矩阵
转换成其它存储方式很高效
支持灵活的切片
缺:
算术操作,列切片,矩阵向量内积操作慢(考虑用coo)
0.8 dia_matrix
对角存储矩阵(Diagonal Matrix)的简称
1 pytorch中的稀疏矩阵
先上官网开发文档镇楼TORCH.SPARSE 1.13 开发文档。
值得说明的是目前pytorch 只支持 COO, CSR, CSC, BSR, 和 BSC五种矩阵,可以用numpy转完在用pytorch。
这里首先讲pytorch而不是numpy的原因是pytorch确实比numpy快,具体看这里这个测试numpy, torch.spmm和torch.spmm 速度测试;
常用的方法有如下
1.1 to_sparse()
a = torch.tensor([[0, 2.], [3, 0]])
a.to_sparse()
官网有例子,不再重复造轮子;
1.2 to_sparse_csr()
1.3 sparse_coo_tensor()
1.4 sparse_csr_tensor()
crow_indices = torch.tensor([0, 2, 4])
col_indices = torch.tensor([0, 1, 0, 1])
values = torch.tensor([1, 2, 3, 4])
csr = torch.sparse_csr_tensor(crow_indices, col_indices, values, dtype=torch.float64)
csr
"""
tensor(crow_indices=tensor([0, 2, 4]),col_indices=tensor([0, 1, 0, 1]),values=tensor([1., 2., 3., 4.]), size=(2, 2), nnz=4,dtype=torch.float64)
"""
csr.to_dense()
"""
tensor([[1., 2.],[3., 4.]], dtype=torch.float64)
"""
1.5 sparse.sum()
1.6 sparse.mm()
这里提一句,torch.sparse.mm()和torch.spmm()是一样的,映射到的底层函数函数一样;具体可看这个numpy, torch.spmm和torch.spmm 稀疏矩阵乘法 测试;
2 numpy中的稀疏矩阵
照例搬出官方文档镇楼,Sparse matrices 1.11.4 官方文档
numpy是高性能科学计算和数据分析的基础包,其对稀疏矩阵的操作主要依赖于scipy开发包。
此处仍然引开篇的博客SciPy 中不同稀疏矩阵存储方式介绍
关于使用智能AI来加速对稀疏矩阵的运算,可参考此链接一行代码加速 sklearn 运算上千倍
PS:如果对numpy中的方法不熟,可以看这篇博客NumPy:数组批量计算
再贴一个numpy稀疏矩阵转pytorch的代码:
def sparse_mx_to_torch_sparse_tensor(sparse_mx):"""Convert a scipy sparse matrix to a torch sparse tensor."""if type(sparse_mx) != sp.coo_matrix:sparse_mx = sparse_mx.tocoo().astype(np.float32)indices = torch.from_numpy(np.vstack((sparse_mx.row, sparse_mx.col)).astype(np.int64))values = torch.from_numpy(sparse_mx.data).float()shape = torch.Size(sparse_mx.shape)return torch.sparse.FloatTensor(indices, values, shape)
参考博文及感谢
部分内容参考以下链接,这里表示感谢 Thanks♪(・ω・)ノ
参考博文1 Pytorch 关于稀疏矩阵 1.13 官方开发文档
https://pytorch.org/docs/1.13/sparse.html?highlight=sparse#module-torch.sparse
参考博文2 Numpy 关于稀疏矩阵 Sparse matrices 1.11.4 官方文档
https://docs.scipy.org/doc/scipy/reference/sparse.html
参考博文3 SciPy 中不同稀疏矩阵存储方式介绍
https://dreamhomes.github.io/posts/202012311027/
参考博文4 不同稀疏矩阵存储方式介绍
https://blog.csdn.net/DreamHome_S/article/details/111994423
参考博文5 numpy, torch.spmm和torch.spmm 稀疏矩阵乘法测试
https://github.com/rusty1s/pytorch_sparse/issues/356
参考博文6 一行代码加速 sklearn 运算上千倍
https://blog.csdn.net/dQCFKyQDXYm3F8rB0/article/details/125382907
相关文章:
关于Pytorch和Numpy中的稀疏矩阵sparse的知识点
Pytorch和Numpy中的稀疏矩阵sparse 0 稀疏矩阵类别0.1 coo_matrix0.2 dok_matrix0.3 csr_matrix0.4 csc_matrix0.5 bsr_matrix0.6 bsc_matrix0.7 lil_matrix0.8 dia_matrix 1 pytorch中的稀疏矩阵1.1 to_sparse()1.2 to_sparse_csr()1.3 sparse_coo_tensor()1.4 sparse_csr_ten…...
2024年AI云计算专题研究报告:智算带来的变化
今天分享的人工智能系列深度研究报告:《2024年AI云计算专题研究报告:智算带来的变化》。 (报告出品方:华泰证券) 报告共计:32页 Al 云计算 2024:关注智算带来的新变化 通过对海内外主要云厂商及其产业链…...
孩子还是有一颗网安梦——Bandit通关教程:Level 5 → Level 6
🕵️♂️ 专栏《解密游戏-Bandit》 🌐 游戏官网: Bandit游戏 🎮 游戏简介: Bandit游戏专为网络安全初学者设计,通过一系列级别挑战玩家,从Level0开始,逐步学习基础命令行和安全概念…...
vue2-elementUI部分组件样式修改
el-radio样式: /deep/ .el-radio__input .el-radio__inner {width: 20px;height: 20px;position: relative;cursor: pointer;-webkit-appearance: none;-moz-appearance: none;appearance: none;border: 1px solid #999;border-radius: 0;outline: none;transition…...
fijkplayer flutter 直播流播放
fijkplayer flutter 直播流播放 fijkplayer 是 ijkplayer 的 Flutter 封装, 是一款支持 android 和 iOS 的 Flutter 媒体播放器插件, 由 ijkplayer 底层驱动。 通过纹理(Texture)接入播放器视频渲染到 Flutter 中。 前言 目前使用…...
Javascript的基本语法(规范)
JS的基本语法规范 1.JS中严格区分大小写 2.JS中每一个指令被称为一个语句,每一个语句都应该以分号结尾 - 在JS中有自动的添加分号的机制,如果不写分号浏览器会自动为你添加 - 有些情况下,浏览器可能会给你加错了(几率低&#…...
vue chrome debugger 无效
昨天晚上debbger可以正常运行的,但是早上起来突然间所有的debugger都不会被命中,重装了vscode,也清了浏览器缓存,可是这个bitch还是不行!整整折腾了一早上,就是无法解决,没办法只能找找资料 ,搜…...
JRT实现Cache的驱动
我只给PostGreSql和iris写了连接驱动,永国的库是Cache,他就自己写了个驱动,驱动其实就是把数据库差异接口抽取了出来,然后只要配对应数据库驱动就能连响应的数据库了。 package JRT.Dal.Base;import JRT.Core.MultiPlatform.JRTC…...
ESP32网络开发实例-Web串口(WebSerial)
Web串口(WebSerial) 文章目录 Web串口(WebSerial)1、软件准备2、硬件准备3、代码实现4、接收数据在本文中,我们将介绍如何实现的基于 Web 的 ESP32 串行监视器。 1、软件准备 Arduino IDE在前面的文章中,如何搭建ESP32的Arduino IDE开环境,主参考: ESP32-Arduino-开发实…...
P2 Qt Creator创建第一个Qt程序
前言 🎬 个人主页:ChenPi 🐻推荐专栏1: 《C_ChenPi的博客-CSDN博客》✨✨✨ 🔥 推荐专栏2: 《LLinux C应用编程(概念类)_ChenPi的博客-CSDN博客》✨✨✨ 🌺本篇简介 :这一章我们学…...
加班、效率和价值
效率不等于单位时间单位人干的活,而是等于单位时间单位人产出的价值,衡量工作量的难度很大,而如何选择工作重点,挖掘工作价值难度更大。 加班的不可持续在于两点,第一点是对身体和精神的损害,降低内在动力…...
【QT 5 调试软件+(Linux下验证>>>>串口相关初试串口)+Windows下qt代码在Linux下运行+参考win下历程+基础样例】
【QT 5 调试软件Linux下验证>>>>串口相关初试串口参考win下历程基础样例】 1、前言2、实验环境3、先行了解4、自我总结-win下工程切到Linux下1、平台无关的代码:2、依赖的库:3、文件路径和换行符:4、编译器差异:5、构…...
地址栏不安全提示
在使用浏览器时访问网站的时候,我们可能会遇到地址栏提示不安全的情况。这种情况通常都是是由于未安装有效SSL证书或者网站SSL证书过期等原因导致的。本文将介绍如何处理地址栏提示不安全的问题,以确保我们的上网安全。 1,缺少SSL证书&#x…...
glib编译与实战
文章目录 下载编译修正实战参考 下载 https://ftp.acc.umu.se/pub/GNOME/sources/glib/ 编译 cd glib mkdir buildmeson --prefix/home/glib build ninja -C build ninja -C build install修正 meson.build:1:0: ERROR: Meson version is 0.53.2 but project requires >…...
PHP基础(4)
目录 一、PHP 创建用户定义函数 二、数组 数组的排序函数 一、PHP 创建用户定义函数 用户定义的函数声明以单词 "function" 开头: PHP自定义函数是指用户自行定义的函数,以满足自己的编程需求。在PHP中,可以通过以下语法来定义一…...
软件安全设计
目录 一,STRIDE 威胁建模 1,STRIDE 2,总体流程(关键步骤) 3,数据流图的4类元素 二,安全设计原则 三,安全属性 一,STRIDE 威胁建模 1,STRIDE STRIDE 是…...
Mysql、Oracle安全项检查表及操作脚本
软件开发全资料获取:点我获取 Mysql检查表 Oracle检查表...
单片双向马达驱动芯片D6208的芯片描述
D6208 是一块单片双向马达驱动电路,它使用TTL电平的逻辑信号就能控制卡式录音机和其它电子设备中的双向马达。该电路由一个逻辑部分和一个功率输出部分组成。逻辑部分控制马达正、反转向及制动,功率输出部分根据逻辑控制能提供100mA(典型值&a…...
使用ansible命令部署k8s集群
1.部署ansible集群 使用python脚本一个简单的搭建ansible集群-CSDN博客 2.ansible命令搭建k8s: 1.主机规划: 节点IP地址操作系统配置server192.168.174.150centos7.92G2核client1192.168.174.151centos7.92G2核client2192.168.174.152centos7.92G2核…...
【上海大学数字逻辑实验报告】四、组合电路(三)
一、 实验目的 掌握多路选择器74LS151的原理。掌握译码器74LS138的原理。学会在Quartus II上使用多路选择74LS151设计电路。学会在Quartus II上使用译码器74LS138设计电路。 二、 实验原理 多路选择器又称数据选择器或多路开关,它是一种多路输入单路输出的组合逻…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...
23-Oracle 23 ai 区块链表(Blockchain Table)
小伙伴有没有在金融强合规的领域中遇见,必须要保持数据不可变,管理员都无法修改和留痕的要求。比如医疗的电子病历中,影像检查检验结果不可篡改行的,药品追溯过程中数据只可插入无法删除的特性需求;登录日志、修改日志…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明:server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
关键领域软件测试的突围之路:如何破解安全与效率的平衡难题
在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的核心战斗力。不同于普通商业软件,这些承载着国家安全使命的软件系统面临着前所未有的质量挑战——如何在确保绝对安全的前提下,实现高效测试与快速迭代?这一命题正考验着…...
day36-多路IO复用
一、基本概念 (服务器多客户端模型) 定义:单线程或单进程同时监测若干个文件描述符是否可以执行IO操作的能力 作用:应用程序通常需要处理来自多条事件流中的事件,比如我现在用的电脑,需要同时处理键盘鼠标…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
