torch.sparse_csr_tensor

news2026/2/11 12:48:48

torch.sparse_csr_tensor

  • 以**CSR格式**构建一个稀疏张量。CSR 格式的稀疏张量乘法运算通常比 COO 格式的稀疏张量更快。
    • CSR(Compressed Sparse Row)格式是一种存储稀疏矩阵的常用格式,它通过三个数组来表示稀疏矩阵:
      行指针数组(crow_indices):每行第一个非零值在values中的索引。最后一个元素是非零值的总个数。
      列索引数组(col_indices):矩阵中非零值所在列的索引
      非零元素数组(values):矩阵中的非零值,按行优先顺序排列。
      假设我们有一个5x5的稀疏矩阵A,如下所示:
      [ 0 0 1 0 0 2 0 0 3 0 0 4 0 0 0 0 0 0 0 5 6 0 7 0 0 ] \begin{bmatrix} 0 & 0 & 1 & 0 & 0 \\ 2 & 0 & 0 & 3 & 0 \\ 0 & 4 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 5 \\ 6 & 0 & 7 & 0 & 0 \\ \end{bmatrix} 0200600400100070300000050
      ​CSR格式数据为:
      crow_indices= [0, 1, 3, 4, 5, 7]
      col_indices= [2, 0, 3, 1, 4, 0, 2]
      values = [1, 2, 3, 4, 5, 6, 7]
      • 解释:
        values = [1, 2, 3, 4, 5, 6, 7]
        行优先顺序存储所有非零元素的值,顺序与列索引数组对应。
        col_indices= [2, 0, 3, 1, 4, 0, 2]
        第1行的第1个非零元素是1,位于第2列,所以第1个元素是2
        第2行的第1个非零元素是2,位于第0列,所以第2个元素是0
        第2行的第2个非零元素是3,位于第3列,所以第3个元素是3
        第3行的第1个非零元素是4,位于第1列,所以第4个元素是1
        第4行的第1个非零元素是5,位于第4列,所以第5个元素是4
        第5行的第1个非零元素是6,位于第0列,所以第6个元素是0
        第5行的第2个非零元素是7,位于第2列,所以第7个元素是2
        crow_indices= [0, 1, 3, 4, 5,7]
        第1行的第一个非零元素1,在values中的下标是0,所以这里是0
        第2行的第一个非零元素2,在values中的下标是1,所以这里是1
        第3行的第一个非零元素4,在values中的下标是3,所以这里是3
        第4行的第一个非零元素5,在values中的下标是4,所以这里是4
        第5行的第一个非零元素6,在values中的下标是5,所以这里是5
        共有7个非零元素[1, 2, 3, 4, 5, 6, 7],故最后一个数是7

torch.sparse_csr_tensor(crow_indices, col_indices, values, size=None, *, dtype=None, device=None, pin_memory=False, requires_grad=False, check_invariants=None)Tensor

参数

  • crow_indices (array_like) - (B+1) 维数组 (*batchsize, nrows + 1)。每行第一个非零值在values中的索引。最后一个元素是非零值的总个数。相邻数字的差值,表示给定行中元素的数量。
  • col_indices (array_like) – values中每个元素的列坐标。长度与 values 相同。
  • values (array_list) – 张量的初始值。可以是列表、元组、NumPy ndarray、标量和其他类型
  • size (list, tuple, torch.Size, optional) – 稀疏张量的大小: (*batchsize, nrows, ncols, *densesize) .如果未提供,则大小将被推断为足够大的最小大小,以容纳所有非零元素。

关键字参数

  • dtype (torch.dtype,可选) – 返回张量的所需数据类型。默认值:如果为 None,则从值推断数据类型。
  • device (torch.device,可选) – 返回的张量的所需设备。默认值:如果为 None,则使用当前设备作为默认张量类型(请参阅 torch.set_default_device() )。device 将是 CPU 张量类型的 CPU,CUDA 张量类型的当前 CUDA 设备。
  • pin_memory (bool,可选) – 如果设置,则返回的张量将在固定内存中分配。仅适用于 CPU 张量。默认值:False。可以使用 .to(‘cuda’) 方法将数据从固定内存移动到 GPU,通常比从常规内存移动到 GPU 更快。
  • requires_grad (bool, 可选) – 如果 autograd 应记录对返回的张量的操作。默认值:False。
  • check_invariants (bool, 可选) – 是否选中稀疏张量不变性。默认值:False(由 torch.sparse.check_sparse_tensor_invariants.is_enabled() 得到)
    • 不变性检查是一种验证机制,用于确保稀疏张量的数据结构和逻辑是正确的。如:压缩稀疏行(CSR)格式中的一个不变性条件,即crow_indices数组的最后一个元素必须等于非零元素的数量(nnz)。

示例代码

import torch  # 导入PyTorch库

# 定义CSR格式稀疏矩阵的行索引数组,表示每一行的起始位置
crow_indices = [0, 1, 3, 4, 5, 7]
# 定义CSR格式稀疏矩阵的列索引数组,表示每个非零元素所在的列
col_indices = [2, 0, 3, 1, 4, 0, 2]
# 定义CSR格式稀疏矩阵的非零元素值
values = [1, 2, 3, 4, 5, 6, 7]
# 使用torch.sparse_csr_tensor函数创建CSR格式的稀疏张量
# crow_indices和col_indices分别转换为torch.int64类型的张量
# values转换为默认类型的张量,并指定稀疏张量的数据类型为torch.double
x = torch.sparse_csr_tensor(torch.tensor(crow_indices, dtype=torch.int64),
                            torch.tensor(col_indices, dtype=torch.int64),
                            torch.tensor(values), dtype=torch.double)
print(f'x=\n{x}') # 打印稀疏张量x
print(f'x的稠密矩阵形式=\n{x.to_dense()}') # 将稀疏张量x转换为稠密矩阵形式并打印
'''output
x=
tensor(crow_indices=tensor([0, 1, 3, 4, 5, 7]),
       col_indices=tensor([2, 0, 3, 1, 4, 0, 2]),
       values=tensor([1., 2., 3., 4., 5., 6., 7.]), size=(5, 5), nnz=7,
       dtype=torch.float64, layout=torch.sparse_csr)
x的稠密矩阵形式=
tensor([[0., 0., 1., 0., 0.],
        [2., 0., 0., 3., 0.],
        [0., 4., 0., 0., 0.],
        [0., 0., 0., 0., 5.],
        [6., 0., 7., 0., 0.]], dtype=torch.float64)
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2267940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Excel基础知识

一:数组 一行或者一列数据称为一维数组,多行多列称为二维数组,数组支持算术运算(如加减乘除等)。 行:{1,2,3,4} 数组中的每个值用逗号分隔列:{1;2;3;4} 数组中的每个值用分号分隔行列&#xf…

快速下载pytorch_geometric

注意:千万不要一上去就使用pip去安装!!! 1.找到GitHub手动下载所需依赖: https://github.com/pyg-team/pytorch_geometric 进入网址后点击此处: 2.点击here进去后寻找自己的torch版本(我的是torch2.1.2的…

数学建模 绘图 图表 可视化(2)

文章目录 前言柱形图条形图克利夫兰点图系列坡度图南丁格尔玫瑰图径向柱图极坐标图词云图总结参考资料 前言 承接上期 数学建模 绘图 图表 可视化(1)的总体描述,这期我们继续跟随《Python 数据可视化之美 专业图表绘制指南》步伐来学习其中l…

建造者模式 Builder Pattern

在创建一个对象的时候,构造器参数有点多,而且有些参数还是可选的,再者还有不少同类型的,那就更应该使用 builder 模式了。 使用 Builder 模式的初衷是 把易变性(mutability)移动到Builder类,而…

【Java】IO流练习

IO流练习 题干: 根据指定要求,完成电话记录、 注册、登录 注册 题干: 完成【注册】功能: 要求: 用户输入用户名、密码存入users.txt文件中 若users.txt文件不存在,创建该文件若users.txt文件存在 输入…

计算机网络:应用层 —— 网络应用模式

文章目录 客户—服务器方式和对等方式客户/服务器方式 (C/S方式)工作流程特点 对等方式 (P2P方式)工作流程P2P 应用特点 客户—服务器方式和对等方式 网络应用程序运行在处于网络边缘的不同的端系统上,通过彼此间的通信来共同完成某项任务。 开发一种新的网络应用…

118.【C语言】数据结构之排序(堆排序和冒泡排序)

目录 1.堆排序 2.冒泡排序 单趟排序的两种情况 情况1.和arr[i]的前一个元素交换,第一次循环结束时i的值为n-1,第二次循环结束时i的值为n-2 情况2.和arr[i]的后一个元素交换,第一次循环结束时i的值为n-2,第二次第一次循环结束时i的值为n-3,... 将单趟排序代码嵌入外循环中…

【图像处理lec9】小波与多分辨率分析

目录 一、背景 1、引出小波变换 2、图像金字塔 (1)图像金字塔的基本概念 (2)高斯金字塔 (3)拉普拉斯金字塔 (4)金字塔的结构与生成框图 3、子带编码 (1&#xf…

ubuntu2204 gpu 没接显示器,如何连接vnc

之前一直用ssh ,一直没接显示器,后来实在不方便,要安个vnc看一下,结果装上就黑了 硬件上:买一个HDMI显卡欺骗器插在设备上。 软件上:装一个虚拟显示器欺骗一下 sudo apt install xserver-xorg-coresudo apt install…

黑神话悟空游戏鼠标光标使用教程与下载

效果图: 鼠标光标特点 这套鼠标光标的设计灵感来源于《黑神话:悟空》游戏中的角色和元素,具有以下特点: • 主题鲜明:光标设计紧扣游戏主题,采用了游戏中的元素,让玩家在使用电脑时也能感受到…

32132132123

📢博客主页:https://blog.csdn.net/2301_779549673 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! 📢本文由 JohnKi 原创,首发于 CSDN🙉 📢未来很长&#…

简述css中z-index的作用?如何用定位使用?

z-index是一个css属性,用于控制元素的堆叠顺序, 如何使用定位用index 1、position:relative; z-index; 相对于自己来定位的,可以根据top,bottom,right,left&#xff…

简单贪吃蛇小游戏的设计与实现

文章目录 1、知识预备1.1 WIN32 API1.1.1 什么是WIN32 API1.1.2 了解部分WIN32 API1.1.2.1 控制台坐标1.1.2.2 控制台光标1.1.2.3 获取键盘按键情况 2.1 宽字符2.1.1 C语言的国际化2.1.2 宽字符的打印 2、 贪吃蛇游戏设计2.1 游戏开始2.2 游戏运行2.2.1 更新分数2.2.2 按键检测…

mac中idea菜单工具栏没有git图标了

1.右击菜单工具栏 2.选中VCS,点击添加 3.搜索你要的工具,选中点击确定就添加了 4.回到上面一个界面,选中你要放到工具栏的工具,点击应用就好了 5.修改图标,快捷键或者右击选中编辑图标 6.选择你要的图标就好了

ElementPlus 自定义封装 el-date-picker 的快捷功能

文章目录 需求分析 需求 分析 我们看到官网上给出的案例如下,但是不太满足我们用户想要的快捷功能,因为不太多,因此需要我们自己封装一些,方法如下 外部自定义该组件的快捷内容 export const getPickerOptions () > {cons…

电子病历五级的Python编程基础实战

一、电子病历五级之路:机遇与挑战并存 在当今数字化医疗的浪潮下,电子病历五级成为医院迈向高质量发展的关键里程碑。它不仅象征着医院信息化建设的深度与广度,更是保障医疗服务质量、提升患者安全的核心要素。随着电子病历五级标准的深入推行…

VDA 学习手册

VDA(Verband der Automobilindustrie,德国汽车工业联合会)报文标准是专为汽车行业制定的电子数据交换(EDI)标准,用于支持供应链管理中的数据传输。它是由德国汽车工业联合会开发和维护的,广泛应…

cesium入门学习四

怎么加载地图效果文件,地图效果的显示。 学习总结: 1.cesium入门学习一-CSDN博客 2.cesium入门学习二-CSDN博客 3.cesium入门学习三-CSDN博客 1.怎么加载geojson文件,并在html中显示 1.1 geojson文件来源: DataV.GeoAtlas地理小…

前端开发 -- 自动回复机器人【附完整源码】

一&#xff1a;效果展示 本项目实现了一个简单的网页聊天界面&#xff0c;用户可以在输入框中输入消息&#xff0c;并点击发送按钮或按下回车键来发送消息。机器人会根据用户发送的消息内容&#xff0c;通过关键字匹配来生成自动回复。 二&#xff1a;源代码分享 <!DOCTYP…

2011-2019年各省总抚养比数据

2011-2019年各省总抚养比数据 1、时间&#xff1a;2011-2019年 2、来源&#xff1a;国家统计局 3、指标&#xff1a;行政区划代码、地区、年份、总抚养比(人口抽样调查)(%) 4、范围&#xff1a;31省 5、指标解释&#xff1a;总抚养比也称总负担系数。指人口总体中非劳动年…