参考文章:Pytorch中的torch.gather函数的含义

demo

b = torch.Tensor([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
print(b)
index_1 = torch.LongTensor([[0,1],[2,0],[1,1]])
index_2 = torch.LongTensor([[0,1,1],[0,0,0]])
print(b.gather(dim=1, index=index_1))#print(torch.gather(b, dim=1, index=index_1))
print(b.gather(dim=0, index=index_2))

gather函数的功能可以解释为根据 index 参数(即是索引)返回数组里面对应位置的值
这里的b.gather()写法和torch.gather(b)的写法都可以,重点是两个参数,dim和index

低维的理解方式

dim=0表示按行来索引,也就是说index的值表示的是第几行
dim=1表示按列来索引,也就是指index的值表示的是第几列

b.gather(dim=1, index=index_1)可以看到index_1 = torch.LongTensor([[0,1],[2,0],[1,1]])是一个3行2列的矩阵,根据dim=1,index_1里面的值表示的就是第几列,第几行就由index_1决定(共3行),那么[0,1]表示的就是【第0行第0列,第0行第1列】;[2,0]表示【第1行第2列,第1行第0列】, [1,1]表示【第3行第1列,第3行第1列】

b.gather(dim=0, index=index_2)可以看到index_2 = torch.LongTensor([[0,1,1],[0,0,0]])是一个2行3列的矩阵,根据dim=0,index_2里面的值表示的就是第几行,第几列就由index_2决定(共3列),那么[0,1,1]表示的就是【第0行第0列,第1行第1列,第1行第2列】;[0,0,0]表示【第0行第0列,第0行第1列,第0行第2列】

运行结果

'''b'''
######### 0列  1列  2列  3列
tensor([[ 1.,  2.,  3.,  4.],#   0行[ 5.,  6.,  7.,  8.],#   1行[ 9., 10., 11., 12.]])#  2行
'''b.gather(dim=1, index=index_1)'''
tensor([[ 1.,  2.],[ 7.,  5.],[10., 10.]])
'''b.gather(dim=0, index=index_2)'''
tensor([[1., 6., 7.],[1., 2., 3.]])

高维的理解方式

b.gather(dim=1, index=index_1)可以看到index_1 = torch.LongTensor([[0,1],[2,0],[1,1]])是一个3行2列的矩阵,index_1的[0,1]中的0的索引是(0,0),1的索引是(0,1);[2,0]中的2索引是(1,0),0的索引是(1,1);[1,1]中左边1的索引是(2,0),右边1的索引是(2,1)。然后根据dim=1,需要把这些索引的dim=1维度的值全部替换成对应index_1中的值,操作如下:

[0,1]中的0的索引是(0,0)转变为(0,0),1的索引是(0,1)转变为(0,1)
[2,0]中的2索引是(1,0)转变为(1,2),0的索引是(1,1)转变为(1,0)
[1,1]中左边1的索引是(2,0)转变为(2,1),右边1的索引是(2,1)转变为(2,1)

转变之后的索引对应到b上,把对应索引的数值取出来即可

gather() 的函数功能相关推荐

  1. 函数功能MATLAB

    近期一直在查找函数功能之类的题问,现在正好有机会和大家享共一下. 百科名片 录目 简介 开展程历 要主功能 新特性 版本分析 特色 优势 开展 简介 开展程历 要主功能 新特性 版本分析 特色 优势 ...

  2. R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能)

    R语言计算dataframe数据列中各分类的计数(类似pandas value_counts函数功能) 目录 R语言计算dataframe数据列中各分类的计数(类似pandas value

  3. setsockopt()函数功能介绍

    setsockopt()函数功能介绍 功能描述:获取或者设置与某个套接字关联的选项.选项可能存在于多层协议中,它们总会出现在最上面的套接字层. 用法: #include <sys/types.h ...

  4. Jmeter内置函数功能(五)

    在企业微信接口创建会议室时. {"name":"18F-会议室","capacity":10,"city":" ...

  5. tf.pad函数功能介绍

    tf.pad()函数主要是对张量在各个维度上进行填充,该函数的参数如下所示: pad(tensor,paddings,mode='CONSTANT',name=None ) 其中: tensor是待填 ...

  6. fread和fwrite函数功能

    fread和fwrite函数功能   用来读写一个数据块. 一般调用形式   fread(buffer,size,count,fp);   fwrite(buffer,size,count,fp); ...

  7. Delphi Format函数功能及用法详解

    DELPHI中Format函数功能及用法详解 DELPHI中Format函数功能及用法详解function Format(const Format: string; const Args: array ...

  8. Unity3D-相关函数功能

    函数功能 1.每隔固定时间执行一次,时间间隔固定(0.02s),时间间隔可以修改. 适用性:适合对物体作移动,旋转等物理操作. 函数执行不受渲染影响. private void FixedUpdate ...

  9. 32 引脚_函数功能:定时器T0的中断服务子程序,使P3.7引脚输出音频方波

    void Time0_serve(void ) interrupt 1 using 1 { TH0=(8192-C)/32;     //可证明这是13位计数器TH0高8位的赋初值方法 TL0=(81 ...

最新文章

  1. 将mcomaster配置以apache运行
  2. .NET简谈组件程序设计之(异步委托)
  3. mysql 设置 row格式binlog_MySql:Row 格式的 Binlog 解析
  4. 深度学习的seq2seq模型——本质是LSTM,训练过程是使得所有样本的p(y1,...,yT‘|x1,...,xT)概率之和最大...
  5. BAT3四大巨头安全负责人破天荒聚在了一起,他们都说了什么?
  6. 浅谈如何防范电池事故
  7. 阿里巴巴成立云原生技术委员会,云原生升级为阿里技术新战略
  8. python:实现简单的web开发demo
  9. ORACLE 等待事件的分类
  10. Go Timer使用方法
  11. java string args_java – 语法“final String … args”是什么意思/做什么?
  12. jsp fmt标签详解
  13. 调查了23款加速器,只剩这几款可以白嫖了!
  14. Ubuntu安装USB无线网卡驱动
  15. cisco链路聚合 不均衡_Cisco PT 案例七:配置链路聚合 / 负载均衡
  16. LED显示屏智能化监控运维管理解决方案
  17. 数据归一化及两种常用归一化方法
  18. SQL Server2008下载链接以及安装教程
  19. 如何将硬盘的分区大小设置为整数
  20. Spark使用Java读Hive写入HBase

热门文章

  1. 2021年高考语文咸宁查询成绩,2021年咸宁高考状元是谁分数多少分,历年咸宁高考状元名单...
  2. C -求和公式(整除分块)
  3. 外贸公司业务员和工厂外贸业务员的差别有哪些?
  4. mysql indentify_MYSQL Identifying relationship 和non-Identifying relationship 区别
  5. onekey ghost怎么用
  6. adb 报错 device unauthorized
  7. 使用scrapy时,没有crawl命令
  8. 怎样获取FlightaWare的航班实时数据?
  9. html教程:关于网页字体的设置
  10. 解决pdfminer与pdfplumber冲突问题