torch_scatter.scatter()的使用方法

torch_scatter安装踩坑实录 阅读详情

学习目标:

在学习PyG时,遇到了 scatter 这个函数,经过学习加上自身的理解,记录如下以备复习


学习内容:

在这里插入图片描述

  • src:表示输入的tensor,接下来被处理;
  • index:表示tensor对应的索引;
  • dim:该值取0或者1(-1),默认是1;当dim=0时,表示从行进行分割成元素;当dim=1时,表示从列进行分割成元素。
  • reduce:表示对应的操作

具体操作如下:

例子1

from torch_scatter import scatter
src = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
index = torch.tensor([0, 0, 1], dtype=torch.int64)
out = scatter(src, index, dim=0, reduce='mean')
print(out)

在这里插入图片描述
1.首先是dim=0表示对输入的tensor进行行分割:[1,2,3],[4,5,6],[7,8,9]。
2.索引index=[0,0,1]表示处理的顺序:第一行元素和第二行元素进行处理,再是第三行的元素进行进行。对第一行元素[1,2,3]和第二行元素[4,5,6]进行reduce='mean'得到[2.5,3.5,4.5],对第三行元素[7,8,9]进行reduce='mean'得到[7,8,9].

例子2

from torch_scatter import scatter
src = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 
index = torch.tensor([0, 0, 1], dtype=torch.int64)
out = scatter(src, index, dim=1, reduce='mean')
print(out)

在这里插入图片描述
1.首先dim=1表示对输入的tensor进行列向分割元素[1,4,7]、[2,5,8]和[3,6,9]。
2.索引index=[0,0,1]表示将[1,4,7]和[2,5,8]首先进行reduce='mean'操作得到[1.5,4.5,7.5];[3,6,9]进行reduce=mean操作后仍为[3,6,9],接着将其进行列向拼接。

例子3–维度问题

from torch_scatter import scatter
src = torch.Tensor([[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]])  
index = torch.tensor([1, 1, 0,2], dtype=torch.int64)
out = scatter(src, index, dim=0, reduce='mean')
print(out)

在这里插入图片描述
1.dim=0表示从行向进行分割
[1,2,3]
[4,5,6]
[7,8,9]
[10,11,12]
2.索引index=[1,1,0,2],从索引可以看出顺序为[7,8,9]——[1,2,3]和[4,5,6]——[10,11,12],分别进行reduce='mean'操作得到[7,8,9]——[2.5,3.5,4.5]——[10,11,12]三个tensor,然后进行行向拼接。


Pytorch学习 (二十六)---- torch.scatter的使用 总说 一个非常有用的函数,主要是用于“group index”的操作。 from torch_scatter import scatter import torch src = (torch.rand(2, 6, 2)*4).int() index = torch.tensor([0, 1, 0, 1, 2, 1]) # Broadcasting in the first and last dim. out = scatter(src, index, dim=1, reduce="sum") prin 阅读详情

相关推荐

Pytorch基本知识

事实上,绝大多数操作并不修改tensor的实际数据(即存储区的内容),而是修改tensor的头信息,这样操作既节约内存,处理速度也更快,例如使用索引截取部分tensor后新tensor的内存指向不会发生变化,只会改变对应的地址偏移量,而使用。值得注意的是,model.state_dict()所存储的模型参数tensor的require_grad都是False,而model.named_parameters()模型参数中的require_grad属性都是True。)的一部分,从而可以进行参数优化。

西木风落 1705

torch_scatter安装

图卷积中常用的一个函数,直接pip install下载不下来,查阅各种资料之后跑通的一个比较方便的方法,记录一下: 1. 查看torch以及cuda版本: import torch print(torch.__version__) print(torch.version.cuda) 2. 找版本都对应上的torch_scatter并下载: https://pytorch-geometric.com/whl/ cp是指python版本,可以在命令行中输入python查看。 例如...

dream__1的博客 2万+

torch.scatter与torch_scatter库使用整理

最近在做图结构相关的算法,scatter能把邻接矩阵里的信息修改,或者把邻居分组算个sum或者reduce,挺方便的,简单整理一下。 torch.scatter 与 tensor._scatter Pytorch自带的函数,用来将作为src的tensor根据index的描述填充到input中,形式如下: ouput = torch.scatter(input, dim, index, src) # 或者是 input.scatter_(dim, index, src) 两个方法的功能是相同的,而带下划线的

回炉重造P的博客 7608

torch.scatter

本文目录一、函数简介二、二维举例三、详解执行过程1. 第一步2. 第二步3. 第三步4. 问题 一、函数简介 torch.scatter(input, dim, index, src) dim ([int]) – the axis along which to index index (LongTensor) – the indices of elements to scatter, can be either empty or of the same dimensionality as src. Whe

芒果干的博客 7983

PyG使用scatter对图节点特征进行聚合

上述代码我们定义了一个5个节点的特征矩阵,如果我们希望这5个节点根据不同的索引关系进行聚合,那么只需要重新定义索引即可,我们定义了索引为【0,0,0,1,1】,它的池化方式就是将第一个节点、第二个节点、第三个节点进行均值化得到一个维度为【1,21】的向量,然后将第四个节点和第五个节点进行池化,得到另外一个维度为【1,21】的向量。上面代码创建了一个节点特征矩阵维度为【37,21】,代表共有37个节点,每个节点的特征维度为21,如果我们希望将这37个节点进行均值化,可以使用。还有一种用法就是利用。

优快云 精品推荐 683

T2T基因组组装实战指南:从数据到完整染色体

本文详细介绍了T2T基因组组装技术的实战指南,从测序数据选择到完整染色体组装的全流程。重点解析了ONT ultra-long和PacBio HiFi测序技术的优势,以及如何攻克端粒和着丝粒等重复区域的组装难题。通过具体案例和实用技巧,帮助研究人员实现从数据到完整染色体的高质量组装。

weixin_29292535的博客 845

torch_scatter.scatter()的使用方法详解

torch_scatter.scatter()的使用方法详解

KI的博客 4223

faster lio 回环 加入GTSAM优化的记录

对Faster lio 加入回环、gtsam优化,在室外建图遇到的问题和过程

Nico_jion的博客 2599

one hot编码:`torch.Tensor.scatter_()`函数用法详解

torch.Tensor.scatter_()是torch.gather()函数的方向反向操作。两个函数可以看成一对兄弟函数。gather用来解码one hot,scatter_用来编码one hot。 scatter_(dim, index, src) → Tensor dim (python:int) – 用来寻址的坐标轴 index (LongTensor) – 索引 src(Tensor...

migue_math 3944

高效低功耗设计:PMOS电子开关在墨水屏与ADC采样电路中的创新应用

本文深入探讨了PMOS电子开关在低功耗设计中的创新应用,特别是在墨水屏和ADC采样电路中的关键作用。通过详细分析PMOS的导通机制和近乎零静态功耗特性,展示了其在待机低功耗场景下的显著优势,并提供了实用的电路设计技巧和元器件选型建议,帮助工程师实现极致的功耗优化。

weixin_29193359的博客 162

STM32CubeMX和华为LiteOS Studio开发STM32

传统的STM32的开发通常使用Keil/IAR这类开发软件,随着物联网时代的到来,传统嵌入式的发展不断向物联网方向靠拢,而Keil/IAR这类开发软件无法满足IoT一站式的开发,华为LiteOS Studio结合STM32CubeMX可以快速,高效地进行物联网开发,本文提供一种开发思路及环境的配置方法。...

weixin_45680600的博客 2833

Pytorch相关函数用法(sort、squeeze、gather/scatter)+0.4以后相关版本变化+数据类型转换

0、Pytorch - Variable_Tensor_Numpy_Cuda 之间的转换:很Nice的界面: https://www.aiuai.cn/aifarm606.html 1、pytorch :使用两次sort函数(排序)找出矩阵每个元素在升序或降序排列中的位置 https://blog.csdn.net/LXX516/article/details/7880488...

skywalker_123的博客 1442

Stata新手避坑:用reghdfe搞定行业、地区多重固定效应,告别‘共线性’报错

本文详细介绍了如何使用Stata中的reghdfe命令高效处理多重固定效应问题,解决传统方法在面板回归中遇到的共线性报错和低R²问题。通过实战案例和高级技巧,帮助新手快速掌握行业、地区等多维固定效应的控制方法,提升经济学和金融学研究的分析效率。

weixin_30635053的博客 419

Pytorch下label的one-hot形式转换方法

进行网络训练时通常需要对label转为one-hot形式,下面给出自己知道的两种方法。 方法一 巧妙使用torch.eye()方法 torch.eye(n, m=None, out=None) 参数: n (int ) – 行数 m (int, optional) – 列数.如果为None,则默认为n out (Tensor, optinal) - Output tensor 返回一个二维向...

梦坠凡尘 1万+

DSP篇--C6678功能调试系列之SPI调试

SPI传输数据分为线上直接收发和通过EDMA的数据传输两种。第一种是直接将数据放在线上(SPIDAT1),在寄存器(SPIBUF)中写入命令实现数据的收发;第二种需要配置EDMA,将数据buffer直接作为EDMA的数据源进行传输,其需要配置的参数和中断与EDMA一致。

nanke_yh的博客 1259

华为OD机试真题 新系统2026-04-08 C语言 实现【直捣黄龙】

小王在玩一款叫做直捣黄龙的小游戏,在该游戏中他需要从入口位置进入敌营,绕过哨兵的层层封锁,达到敌军司令部实施斩首行动。 敌军阵营是一个n*n的矩阵,入口在坐标(0,n/2),敌军司令部在坐标(n-1,n/2),每个哨兵警戒以自己为中心的9宫格,一旦被哨兵发现则行动失败。

MISAYAONE的博客 183

Pytorch Geometric(PyG)报错:AttributeError: module ‘torch_geometric.utils‘ has no attribute ‘scatter_‘

  在复现一篇基于torch-geometric库的图神经网络代码时,碰到了这个错误AttributeError: module ‘torch_geometric.utils’ has no attribute ‘scatter_’,是在调用 tg.utils.scatter_()时出现的错误。心里一惊,一般情况下这种涉及源码的错误大多是版本问题。   直接搜这个错误,没有找到相关的内容,大多数解决方案是对于pytorch出现的报错,应该是用这个库的人不多。在Github上torch-geometric库的

噢啦啦耶的博客 2832

抖音中动态生成msToken的方法

抖音中动态生成msToken的方法

sh_moranliunian的博客 2483

补充:标签平滑的实现

一、torch.gather()函数与交叉熵损失的计算 1.1 torch.gather()函数 这个函数较难懂。这里讲一下,因为后面可能用到。 结果的形状与index的形状一样。比如上例中,index是一个2*2的张量,那么最后的结果就是2*2的张量。 首先令out[i][j] = input[i][j],然后因为dim是1,所以要把j换掉,换成index[i][j]。这样就得到最后的结果了。 out[0][0] = input[0][0], 把0换成index[0][0] = 0。所以..

liupc的学习笔记 562

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

【PyTorch】Torch.gather()实战指南:从基础到高级应用

本文详细解析了PyTorch中torch.gather()函数的基础概念、应用场景与高级技巧。通过丰富的代码示例,展示了如何在不同维度上高效收集张量元素,包括数据筛选、强化学习动作选择等实战应用,并提供了常见误区的调试建议。掌握这一核心函数将显著提升PyTorch开发效率。

q1w3e5r7t9y的博客 680

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

pytorch系列(一)常见错误

pytorch使用(一)常见错误 1、RuntimeError: scatter_(): Expected dtype int64 for index. RuntimeError: scatter_(): Expected dtype int64 for index. scatter要求数据是int64类型,而我在定义tensor时写的是torch.Tensor(x),应该写成torch.LongTensor(x),指定为int64类型。其他数据类型的定义方法可参考: https://pytorch.or

qq_30049011的博客 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

学习记录

在学习浏览网页test过程中遇到的一些需要研究一下才能看懂的函数,在这里做一下记录,供以后翻看学习 1. maximum() 1 import numpy as np 2 N, D_in, H, D_out = 64, 1000, 100, 10 3 x = np.random.randn(N, D_in) # (64, 1000) 4 y = np.rand...

Javier9201的博客 229

pytorch 基础知识

手撸代码:https://zhuanlan.zhihu.com/p/666471085?utm_id=0。

zack_liu的博客 654

pytorch遇到的一些坑

pytorch遇到的一些非常害人的坑一、tensor.scatter()暗含的坑 一、tensor.scatter()暗含的坑 tensor.scatter()方法pytorch官方文档讲解的还是很详细的,如下图所示: 有一个坑就是:**index参数必须是torch.int64 or torch.long!torch.int32 or torch.int都是不可以的!**否则的话,会报一些匪夷所思的错误!如下图所示: ...

yamengxi的博客 379

PyTorch深度学习实践(第四章)

index=torch.tensor([ [0, 1, 2, 0, 0], [2, 0, 0, 1, 2] ])映射索引。dim:来确定是按照行还是列进行映射,dim=0=列,dim=1=行。index:映射按照index的元素进行。strip([char])用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。对于scatter_()函数接受三个参数:维度,映射索引,映射数值。a=torch.zeros(3,5)生成三行五列元素均为0的张量。b=torch.rand(2,5)映射数值。

m0_70858758的博客 246

Pytorch scatter_()用法

pytorch的scatter_用法

Mark_Australia的博客 600
上一篇: PyG的Planetoid无法直接下载Cora等数据集的解决方法
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值