本文首发于公众号【拇指笔记】

官方文档的解释

torch.gather(input,dim,index,out=None) → Tensor

torch.gather(input, dim, index, out=None) → Tensor

Gathers values along an axis specified by dim.

For a 3-D tensor the output is specified by:

out[i][j][k] = input[index[i][j][k]][j][k] # dim=0

out[i][j][k] = input[i][index[i][j][k]][k] # dim=1

out[i][j][k] = input[i][j][index[i][j][k]] # dim=2

Parameters:

input (Tensor) – The source tensor

dim (int) – The axis along which to index

index (LongTensor) – The indices of elements to gather

out (Tensor, optional) – Destination tensor

Example:

>>> t = torch.Tensor([[1,2],[3,4]])

>>> torch.gather(t, 1, torch.LongTensor([[0,0],[1,0]]))

1 1

4 3

[torch.FloatTensor of size 2x2]

举个例子

import torch

a = torch.Tensor([[1,2],

[3,4]])

b = torch.gather(a,1,torch.LongTensor([[0,0],[1,0]]))

#1. 取各个元素行号:[(0,y)(0,y)][(1,y)(1,y)]

#2. 取各个元素值做行号:[(0,0)(0,0)][(1,1)(1,0)]

#3. 根据得到的索引在输入中取值

#[1,1],[4,3]

c = torch.gather(a,0,torch.LongTensor([[0,0],[1,0]]))

#1. 取各个元素列号:[(x,0)(x,1)][(x,0)(x,1)]

#2. 取各个元素值做行号:[(0,0)(0,1)][(1,0)(0,1)]

#3. 根据得到的索引在输入中取值

#[1,2],[3,2]

原理解释

假设输入与上同;index=B;输出为C B中每个元素分别为b(0,0)=0,b(0,1)=0 b(1,0)=1,b(1,1)=0

如果dim=0(列) 则取B中元素的列号,如:b(0,1)的1 b(0,1)=0,所以C中的c(0,1)=输入的(0,1)处元素2

如果dim=1(行) 则取B中元素的列号,如:b(0,1)的0 b(0,1)=0,所以C中的c(0,1)=输入的(0,0)处元素1

总结如下: 输出 元素 在 输入张量 中的位置为: 输出元素位置取决与同位置的index元素 dim=1时,取同位置的index元素的行号做行号,该位置处index元素做列号 dim=0时,取同位置的index元素的列号做列号,该位置处index元素做行号。

最后根据得到的索引在输入中取值

index类型必须为LongTensor gather最终的输出变量与index同形。

gather torch_我对torch中的gather函数的一点理解相关推荐

  1. torch中的topk()函数

    torch中的topk()函数 In [2]: import torchIn [3]: a=torch.randn((4,6))In [4]: a Out

  2. gather torch_浅谈Pytorch中的torch.gather函数的含义

    pytorch中的gather函数 pytorch比tensorflow更加编程友好,所以准备用pytorch试着做最近要做的一些实验. 立个flag开始学习pytorch,新开一个分类整理学习pyt ...

  3. 图像检索中BOW和LSH的一点理解

    去年年底的时候在一篇博客中,用ANN的框架解释了BOW模型[1],并与LSH[2]等哈希方法做了比较,当时得出了结论,BOW就是一种经过学习的Hash函数.去年再早些时候,又简单介绍过LLC[3]等稀 ...

  4. Python+NumPy中的diag函数(简易理解)

    np.diag(array) 中 array是一个1维数组时,结果形成一个以一维数组为对角线元素的矩阵 array是一个二维数组时,结果输出数组的对角线元素 举例: >>> a ar ...

  5. zookeeper 中 Watcher 通知机制的一点理解

    首先,ZooKeeper 提供了分布式数据的发布/订阅功能. 这让我想到一种模式,观察者模式(发布订阅模式):一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题 ...

  6. 关于博弈论中的共同知识的一点理解

    我是看完一本<博弈论知识精粹>中的一张后忽然有点感悟.其实最初吸引我的就是那个以前已为很多人熟知的案例. 就是著名的"脏脸问题",也叫"红白帽子"问 ...

  7. python中numpy.mean()函数,深度理解axis的含义

    numpy.mean()传送门 numpy.mean(a, axis=None, dtype=None, out=None, keepdims=) a:为array形的数据 axis: 科普下,axi ...

  8. mysql的count函数类型是什么意思_MySQL中的COUNT函数,你理解多少

    前言:COUNT函数相比大家都不陌生,接触过数据库的兄弟们想必都用过,但是,就是这个常用的COUNT函数,却暗含许多玄机. 1.COUNT简介 看看官网对COUNT的简介 大致意思是:COUNT(ex ...

  9. MFC中的InitInstance()函数应该怎样理解

    https://zhidao.baidu.com/question/29097884.html

最新文章

  1. linux 把命令行结果赋值给变量;linux if语句 ; command log
  2. java enummap_Java EnumMap size()方法与示例
  3. 求序列最长不下降子序列_最长不下降子序列nlogn算法详解
  4. stl源码分析de练习
  5. cf244D. Match amp; Catch 字符串hash (模板)或 后缀数组。。。
  6. BZOJ_1629_[Usaco2007_Demo]_Cow_Acrobats_(贪心)
  7. 河北金融学院计算机与科学,河北金融学院计算机科学与技术专业2016年在河北理科高考录取最低分数线...
  8. ASP.Net页面保存持久数据的几种方法比较
  9. PHP文件操作 读取与写入
  10. STC学习:八位数码管滚动显示
  11. android设置背景图片透明
  12. pycharm 文件名不同颜色所代表的含义
  13. Git 配置ssh key
  14. 第六章-网络可靠性设计
  15. 吞云吐雾,美国电子烟问题,内附FDA的一个隐情
  16. Python中字符的匹配
  17. 2013-2015南京大学历史学系若干考试题目汇编
  18. Appium+python自动化(三十二)- 代码写死一时爽,框架重构火葬场 - PageObject+unittest(超详解)...
  19. 鲁大师官方透露:神秘新评测即将在北京重磅来袭
  20. 编辑word文档过程中输入法无法正常使用

热门文章

  1. 8.1分享zwh分享图
  2. 软件学院招生宣传视频工作日志——拍摄(三)
  3. win7系统可以用于授时服务器吗,ntp授时(电脑授时服务器)
  4. java高斯分布随机数_生成符合高斯分布或者其他任意分布的随机数
  5. 解决Scrapy报错: Unknown Command ‘crawl‘
  6. 快速学习-电影推荐系统设计(数据源解析)
  7. python 返回列表索引_python怎么返回列表元素索引?
  8. VB中ScaleWidth与Width区别及应用举例
  9. C语言 printf 格式化 输出 右对齐补零
  10. 史上最全!考研考公视频在某度云倍速 | 敲重点!