gather torch_我对torch中的gather函数的一点理解
本文首发于公众号【拇指笔记】
官方文档的解释
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函数的一点理解相关推荐
- torch中的topk()函数
torch中的topk()函数 In [2]: import torchIn [3]: a=torch.randn((4,6))In [4]: a Out
- gather torch_浅谈Pytorch中的torch.gather函数的含义
pytorch中的gather函数 pytorch比tensorflow更加编程友好,所以准备用pytorch试着做最近要做的一些实验. 立个flag开始学习pytorch,新开一个分类整理学习pyt ...
- 图像检索中BOW和LSH的一点理解
去年年底的时候在一篇博客中,用ANN的框架解释了BOW模型[1],并与LSH[2]等哈希方法做了比较,当时得出了结论,BOW就是一种经过学习的Hash函数.去年再早些时候,又简单介绍过LLC[3]等稀 ...
- Python+NumPy中的diag函数(简易理解)
np.diag(array) 中 array是一个1维数组时,结果形成一个以一维数组为对角线元素的矩阵 array是一个二维数组时,结果输出数组的对角线元素 举例: >>> a ar ...
- zookeeper 中 Watcher 通知机制的一点理解
首先,ZooKeeper 提供了分布式数据的发布/订阅功能. 这让我想到一种模式,观察者模式(发布订阅模式):一个典型的发布/订阅模型系统定义了一种一对多的订阅关系,能够让多个订阅者同时监听某一个主题 ...
- 关于博弈论中的共同知识的一点理解
我是看完一本<博弈论知识精粹>中的一张后忽然有点感悟.其实最初吸引我的就是那个以前已为很多人熟知的案例. 就是著名的"脏脸问题",也叫"红白帽子"问 ...
- python中numpy.mean()函数,深度理解axis的含义
numpy.mean()传送门 numpy.mean(a, axis=None, dtype=None, out=None, keepdims=) a:为array形的数据 axis: 科普下,axi ...
- mysql的count函数类型是什么意思_MySQL中的COUNT函数,你理解多少
前言:COUNT函数相比大家都不陌生,接触过数据库的兄弟们想必都用过,但是,就是这个常用的COUNT函数,却暗含许多玄机. 1.COUNT简介 看看官网对COUNT的简介 大致意思是:COUNT(ex ...
- MFC中的InitInstance()函数应该怎样理解
https://zhidao.baidu.com/question/29097884.html
最新文章
- linux 把命令行结果赋值给变量;linux if语句 ; command log
- java enummap_Java EnumMap size()方法与示例
- 求序列最长不下降子序列_最长不下降子序列nlogn算法详解
- stl源码分析de练习
- cf244D. Match amp; Catch 字符串hash (模板)或 后缀数组。。。
- BZOJ_1629_[Usaco2007_Demo]_Cow_Acrobats_(贪心)
- 河北金融学院计算机与科学,河北金融学院计算机科学与技术专业2016年在河北理科高考录取最低分数线...
- ASP.Net页面保存持久数据的几种方法比较
- PHP文件操作 读取与写入
- STC学习:八位数码管滚动显示
- android设置背景图片透明
- pycharm 文件名不同颜色所代表的含义
- Git 配置ssh key
- 第六章-网络可靠性设计
- 吞云吐雾,美国电子烟问题,内附FDA的一个隐情
- Python中字符的匹配
- 2013-2015南京大学历史学系若干考试题目汇编
- Appium+python自动化(三十二)- 代码写死一时爽,框架重构火葬场 - PageObject+unittest(超详解)...
- 鲁大师官方透露:神秘新评测即将在北京重磅来袭
- 编辑word文档过程中输入法无法正常使用
热门文章
- 8.1分享zwh分享图
- 软件学院招生宣传视频工作日志——拍摄(三)
- win7系统可以用于授时服务器吗,ntp授时(电脑授时服务器)
- java高斯分布随机数_生成符合高斯分布或者其他任意分布的随机数
- 解决Scrapy报错: Unknown Command ‘crawl‘
- 快速学习-电影推荐系统设计(数据源解析)
- python 返回列表索引_python怎么返回列表元素索引?
- VB中ScaleWidth与Width区别及应用举例
- C语言 printf 格式化 输出 右对齐补零
- 史上最全!考研考公视频在某度云倍速 | 敲重点!