pytorch scatter和scatter_详解

article/2025/11/10 18:59:19

文章目录

  • 0. Introduction
  • 1. 定义
  • 2. 详解
      • 例1
      • 例2
  • Reference:

0. Introduction

scatter() 和 scatter_() 的作用是一样的,只不过 scatter() 不会直接修改原来的 Tensor,而 scatter_() 会

PyTorch 中,一般函数加下划线代表直接在原来的 Tensor 上修改


1. 定义

scatter(dim, index, src) 的参数有 3 个

dim:沿着哪个维度进行索引
index:用来 scatter 的元素索引
src:用来 scatter 的源元素,可以是一个标量或一个张量

这个 scatter 可以理解成放置元素或者修改元素

简单说就是通过一个张量 src 来修改另一个张量,哪个元素需要修改、用 src 中的哪个元素来修改由 dim 和 index 决定

官方文档给出了 3维张量 的具体操作说明,如下所示

self [index[i][j][k]] [j] [k] = src[i][j][k]  # if dim == 0
self[i] [index[i][j][k]] [k] = src[i][j][k]  # if dim == 1
self[i] [j] [index[i][j][k]] = src[i][j][k]  # if dim == 2

如果是二维的例子,则应该对应下面的情况:

y [ index[i][j] ] [j] = src[i][j] #if dim==0
y[i] [ index[i][j] ]  = src[i][j] #if dim==1 

2. 详解

例1

在这里插入图片描述
源tensor的每个元素,都按照 index 被scatter(可以理解为填充)到目标tensor中。

  1. 考虑最简单的目标:把x直接塞入目标tensor的前两行dim = 0时,index应该是
    [[0, 0, 0, 0, 0],[1, 1, 1, 1, 1]]
    
  2. 把x直接塞入目标tensor的后两行dim = 0,index应该是
    [[1, 1, 1, 1, 1],[2, 2, 2, 2, 2]]
    

所以,index为几,就把对应位置的元素放入目标tensor的第几行(dim=0时,列不变),大概就是这么个意思。以此类推,dim=1时,“直接塞入”对应的index就是

[[0,1,2,3,4],[0,1,2,3,4]]

例2

更为复杂的例子:

import torcha = torch.arange(1,11).reshape(2,5).float()
# tensor([[1, 2, 3, 4, 5],
#          6, 7, 8, 9, 10]])index=torch.LongTensor([[1, 2, 1, 1, 2], [2, 0, 2, 1, 0]])
# tenso[[1, 2, 1, 1, 2], 
#		[2, 0, 2, 1, 0]]b = torch.zeros(3, 5)
b_= b.scatter(dim=0, index=index, src=a)# tensor([[0, 7, 0, 0, 10],
#         [1, 0, 3, 9, 0],
#         [6, 2, 8, 0, 5]])

过程解析:

  1. 把a中的元素一个个放入到b中
  2. 先取a[0][0]=1, 因为参数dim=0,所以在b中列索引不变,我们要在b选择1这个元素所对应的行。index第一个元素是1,对应b中第二行,所以b[1][0]=1
  3. 再取a[0][1]=2,列索引不变,index对应的第二个元素是2,所以行索引是2。故b[2][1]=2
  4. 重复上述操作直至完成全部元素的放置

技巧:
在寻找元素和index之间的匹配关系时,可以直接按照对应位置来。最终从a选取到b中的元素由index元素的个数决定,即index有多少个元素,a就有多少个元素被选取
在这里插入图片描述



Reference:

torch.scatter_直观理解官网示例
PyTorch笔记之 scatter() 函数


http://chatgpt.dhexx.cn/article/f2Pi80IC.shtml

相关文章

Pytorch中scatter与gather操作

文章目录 数据发散scatter带聚集的发散scatter_add_onnx中scatterND数据聚集gather 数据发散scatter 函数原型pytorch官方文档scatter_: scatter_(dim, index, src) → Tensor注: scatter_是scatter的就地操作。 对于一个三维的张量来说,张…

pytorch中scatter()、scatter_()详解

scatter()、scatter_() scatter() 和 scatter_() 的作用一样。 不同之处在于 scatter() 不会直接修改原来的 Tensor,而 scatter_() 会在原来的基础上对Tensor进行修改。 torch.scatter()官方文档 scatter(dim, index, src)将src中数据根据index中的索引按照dim的…

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

目录 1. 参数2. 示例2.1 简单示例2.2 顺序问题2.3 维度问题 1. 参数 具体来讲,scatter函数的作用就是将index中相同索引对应位置的src元素进行某种方式的操作,例如sum、mean等,然后将这些操作结果按照索引顺序进行拼接。下面我用具体的例子来…

torch.scatter

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

Python中的scatter

假设X与Y,其中X是5X2矩阵 关于X_demo[Y_demo0 , 0],是一种获取子矩阵的方式 因为Y_demo取值只是0与1,可以看做一个布尔数组, 在X_demo[取Y_demo中为0的行,只取第0列] 正好对应 而在scatter(横坐标,纵坐标) 现在已经…

scatter python_Python中scatter()函数--转载

原博文 2017-05-13 20:46 − 原博地址:http://blog.csdn.net/anneqiqi/article/details/64125186 最近开始学习Python编程,遇到scatter函数,感觉里面的参数不知道什么意思于是查资料,最后总结如下: 1、scatter函数原型 2、其中散点的形状参数marker如下:... 相关推荐 …

scatter python_python中的scatter()方法

1、scatter函数原型 2、其中散点的形状参数marker如下: 3、其中颜色参数c如下: 4、基本的使用方法如下: #导入必要的模块 importnumpy as np importmatplotlib.pyplot as plt #产生测试数据 x np.arange(1,10) y x fig plt.figure() ax1 fig.a…

scatter python_Python的散点图绘制 scatter

python能画的图种类非常多,而且看上去都很好看,具体种类部分可参看:https://matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html#matplotlib.pyplot.figure 这里主要是探索下散点图绘制。 1. 首先是导入包,创建数据 imp…

scatter python_Python scatter详解

函数原型:matplotlib.pyplot.scatter(x, y, s=None, c=None, marker=None, cmap=None, norm=None,vmin=None, vmax=None, alpha=None, linewidths=None,verts=None, edgecolors=None, hold=None, data=None,**kwargs) 参数作用如下: x, y位置。 s大小。 c颜色,可能的情况…

scatter

scatter 散点图 全页折叠 语法 scatter(x,y) scatter(x,y,sz) scatter(x,y,sz,c) scatter(___,filled) scatter(___,mkr) scatter(___,Name,Value) scatter(ax,___) s scatter(___) 说明 示例 scatter(x,y) 在向量 x 和 y 指定的位置创建一个包含圆形的散点图。该类型的图形也…

py使用scatter画散点/气泡图

本博文源于《python数据可视化》(黑马程序员编著)。旨在讲解python如何使用scatter函数进行绘画散点图和气泡图。先讲解scatter函数参数如何使用,然后再演示两个例子进行绘画散点图和气泡图 scatter函数参数讲解 scatter(x,y,sNone,cNone,m…

ComposeOptions.kotlinCompilerVersion is deprecated

我为我的 Compose 工程升级 AGP 后 (7.0.0 > 7.0.2)重新编译发生下面错误 ComposeOptions.kotlinCompilerVersion is deprecated. Compose now uses the kotlin compiler defined in your buildscript. 以前需要通过该 composeOptions 指定 Kotlin 版…

比 Java 更强大的 kotlin.Deprecated

我们都知道 Java 有一个java.lang.Deprecated注解,用来将一个 API 标记为“废弃”,或者说“不建议使用”。比如 String 类就有一个被标记为 Deprecated的构造函数: Deprecated public String(byte ascii[], int hibyte) {this(ascii, hibyte…

Android IntentService deprecated|笔记

先回顾一下, 面试一般都喜欢问IntentService 原理, 个人觉的啥是原理,不就是源码吗? 就下面几行源码,就能出滋生出来,几道面试题: 什么IntentService继承service阿,自带looper阿&…

java 注解 @Deprecated

目录 一 笔记二 Deprecated 源码三 定义一个已过时的类 AnnotationTest03_User.java四 使用自定义的过时注解类 一 笔记 Deprecated 可以标注很多元素:类、接口、方法、属性。。。。。。 这个注解也是给编译器看的,也是做编译检查的;被这个…

JAVA后台开发提升注解篇 @Deprecated

前期说明 先说明下,这个注解不加,对代码没有任何影响。 加了的话,会让调用端的人觉得你比较上道。 这是为什么呢? 我们先来简单聊下 Deprecated这个注解。 Deprecated注解 作用域:类、方法或者属性上 格式如下 …

@Deprecated注解

刚学到一个注解 Deprecated 表示这个方法下个版本可能会被弃用 看个东西 /** deprecated */Deprecatedpublic static boolean isEmpty(Nullable Object str) {return str null || "".equals(str);}这是 springframework 下的一个方法 StringUtils.isEmpty() 然后…

deprecated注释 原因

Deprecated 标记下线接口或者属性的时候,希望能够说明下线原因及新的方法地址 可以使用注释 /*** deprecated 我为什么要下线这个字段或者方法,替代的字段或者方法是 {link com.example.demo.SimpleCache.CacheObj#longData}*/Deprecatedprivate BigDe…

deprecated的用法

deprecated的用法:在java中用deprecated标志该方法过时 实例:有如下方法 public Collection getUserPropList(String userId, String systemId,String valueType) throws Exception ... { .... String filter ""; filter "USER_ID" userId …

【Java】Deprecated 注解

1. Deprecated 注解 Deprecated: 用于表示某个程序元素(类,方法等)已过时如果使用 Deprecated 去修饰一个类,表示这个类已经过时了,但过时不代表不能用了,即不推荐使用,仍然可以使用 public class Deprecated_ {publ…