torch.scatter

article/2025/11/11 10:04:15

本文目录

    • 一、函数简介
    • 二、二维举例
    • 三、详解执行过程
      • 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. When empty, the operation returns self unchanged.
  • src ([Tensor] or [float] – the source element(s) to scatter.
  • reduce ([str], optional) – reduction operation to apply, can be either 'add' or 'multiply'.

将src中的数据根据index中的索引按照dim的方向填入到input中

Writes all values from the tensor src into self at the indices specified in the index tensor. For each value in src, its output index is specified by its index in src for dimension != dim and by the corresponding value in index for dimension = dim.

看了上述的官方文档还是不理解,我们继续看官方的例子,这里官方只给了三维,我在这里又加入了二维,在这之前有一个规定

  • 对任意维度d:index.size(d) <= src.size(d)
  • 对d!=dim的维度:index.size(d) <= self.size(d)

二、二维举例

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

先上代码

torch.manual_seed(0)
x = torch.arange(0, 12).reshape(2, 6)
x= x.type(torch.float32)
print(x)
'''
tensor([[ 0.,  1.,  2.,  3.,  4.,  5.],[ 6.,  7.,  8.,  9., 10., 11.]])
'''index = torch.tensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]])
print(index)
'''
tensor([[0, 1, 2, 0, 0],[2, 0, 0, 1, 2]])
'''y = torch.zeros(3, 6)
y = torch.scatter(y, 0, index, x)
print(y)
'''
tensor([[ 0.,  7.,  8.,  3.,  4.,  0.],[ 0.,  1.,  0.,  9.,  0.,  0.],[ 6.,  0.,  2.,  0., 10.,  0.]])
''''''in-place operation'''
yy = torch.zeros(3, 6)
yy.scatter_(0, index, x)
print(yy)
'''
tensor([[ 0.,  7.,  8.,  3.,  4.,  0.],[ 0.,  1.,  0.,  9.,  0.,  0.],[ 6.,  0.,  2.,  0., 10.,  0.]])
'''

下面将上述的执行过程绘制出来

三、详解执行过程

1. 第一步

首先下面是我们的初始化,我们初始化了srcindexinput并且设置了dim=0
填充公式为self [ index[i][j] ][j] = src[i][j]

因为dim=0,所以需要填充的input的行的索引就由index数值也就是index[i][j]来确定,需要填充的input的列的索引对应于index的列,往self里面填充的具体数值由index对应的src来确定

看下面例子序号3

  • 需要填充的input的行的索引:行=index[i][j]=index[0][2]=2
  • 需要填充的input的列的索引:列=index列=j=2
  • self填充的具体数值:self[行][列]=self[2][2]=src[i][j]=2

2. 第二步

下面我们继续上述步骤

可发现当我们进行到第六步的时候,index[0][5]并不存在,所以直接跳过就可以了

3. 第三步

在这一步我们将input填充完毕

如图所示,这里我们取图中的序号11进行验证

序号11

  • 需要填充的input的行的索引:行=index[i][j]=index[1][4]=2
  • 需要填充的input的列的索引:列=index列=j=4
  • self填充的具体数值:self[行][列]=self[2][4]=src[i][j]=10
  • 所以在self的第二行,第四列填入10

4. 问题

为什么在第二步我们遇到的问题吗:当我们进行到序号6的时候,index[0][5]并不存在,我们选择了跳过

可以跳过而没有报错呢,因为最初的文档对src, index, self的维度有过定义

  • 对任意维度d:index.size(d) <= src.size(d)
  • 对d!=dim的维度:index.size(d) <= self.size(d)

所以index的维度是可以小于src的维度的,关系如下在这里插入图片描述


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

相关文章

Python中的scatter

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

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如下&#xff1a; 3、其中颜色参数c如下: 4、基本的使用方法如下&#xff1a; #导入必要的模块 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能画的图种类非常多&#xff0c;而且看上去都很好看&#xff0c;具体种类部分可参看&#xff1a;https://matplotlib.org/api/_as_gen/matplotlib.pyplot.figure.html#matplotlib.pyplot.figure 这里主要是探索下散点图绘制。 1. 首先是导入包&#xff0c;创建数据 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数据可视化》&#xff08;黑马程序员编著&#xff09;。旨在讲解python如何使用scatter函数进行绘画散点图和气泡图。先讲解scatter函数参数如何使用&#xff0c;然后再演示两个例子进行绘画散点图和气泡图 scatter函数参数讲解 scatter(x,y,sNone,cNone,m…

ComposeOptions.kotlinCompilerVersion is deprecated

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

比 Java 更强大的 kotlin.Deprecated

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

Android IntentService deprecated|笔记

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

java 注解 @Deprecated

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

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

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

@Deprecated注解

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

deprecated注释 原因

Deprecated 标记下线接口或者属性的时候&#xff0c;希望能够说明下线原因及新的方法地址 可以使用注释 /*** deprecated 我为什么要下线这个字段或者方法&#xff0c;替代的字段或者方法是 {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: 用于表示某个程序元素(类&#xff0c;方法等)已过时如果使用 Deprecated 去修饰一个类&#xff0c;表示这个类已经过时了&#xff0c;但过时不代表不能用了&#xff0c;即不推荐使用&#xff0c;仍然可以使用 public class Deprecated_ {publ…

Linux命令之grep命令

一、命令介绍 grep命令是文本搜索命令&#xff0c;它可以正则表达式搜索文本&#xff0c;也可从一个文件中的内容作为搜索关键字。grep的工作方式是这样的&#xff0c;它在一个或多个文件中搜索字符串模板。如果模板包括空格&#xff0c;则必须被引用&#xff0c;模板后的所有字…

grep与egrep

个人觉得egrep比较好用&#xff0c;感觉改良了grep的一些不可以直接操作的东西&#xff0c;但是总体来说还是没太大区别的&#xff0c;都是一个过滤工具。 grep 和 egrep 都要通过 正则表达式来筛选我们想要的东西&#xff0c;只能筛选文本内容&#xff0c;不能对目录筛选&…

Linux grep/egrep命令详解

grep命令是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹 配的行打印出来 grep搜索成功&#xff0c;则返回0&#xff0c;如果搜索不成功&#xff0c;则返回1&#xff0c;如果搜索的文件不存在&#xff0c;则返回2。 grep的规则表达式&…

如何在 Linux 中使用 ripgrep (rg) 命令?

ripgrep是开源社区正在进行的 RIIR&#xff08;用 Rust 重写&#xff09;努力的一个优秀成果。&#xff0c;它旨在成为经典grep 命令的高级替代品。 使用 ripgrep 的语法如下&#xff1a; rg <pattern> [files/directories]使用 ripgrep&#xff0c;无需提及文件名。如…