详解PyTorch中Tensor的高阶操作


Posted in Python onAugust 18, 2019

条件选取:torch.where(condition, x, y) → Tensor

返回从 x 或 y 中选择元素的张量,取决于 condition

操作定义:

详解PyTorch中Tensor的高阶操作

举个例子:

>>> import torch
>>> c = randn(2, 3)
>>> c
tensor([[ 0.0309, -1.5993, 0.1986],
    [-0.0699, -2.7813, -1.1828]])
>>> a = torch.ones(2, 3)
>>> a
tensor([[1., 1., 1.],
    [1., 1., 1.]])
>>> b = torch.zeros(2, 3)
>>> b
tensor([[0., 0., 0.],
    [0., 0., 0.]])
>>> torch.where(c > 0, a, b)
tensor([[1., 0., 1.],
    [0., 0., 0.]])

把张量中的每个数据都代入条件中,如果其大于 0 就得出 a,其它情况就得出 b,同样是把 a 和 b 的相同位置的数据导出。

查表搜集:torch.gather(input, dim, index, out=None) → Tensor

沿给定轴 dim,将输入索引张量 index 指定位置的值进行聚合

对一个3维张量,输出可以定义为:

  • out[i][j][k] = tensor[index[i][j][k]][j][k] # dim=0
  • out[i][j][k] = tensor[i][index[i][j][k]][k] # dim=1
  • out[i][j][k] = tensor[i][j][index[i][j][k]] # dim=3

举个例子:

>>> a = torch.randn(4, 10)
>>> b = a.topk(3, dim = 1)
>>> b
(tensor([[ 1.0134, 0.8785, -0.0373],
    [ 1.4378, 1.4022, 1.0115],
    [ 0.8985, 0.6795, 0.6439],
    [ 1.2758, 1.0294, 1.0075]]), tensor([[5, 7, 6],
    [2, 5, 8],
    [5, 9, 2],
    [7, 9, 6]]))
>>> index = b[1]
>>> index
tensor([[5, 7, 6],
    [2, 5, 8],
    [5, 9, 2],
    [7, 9, 6]])
>>> label = torch.arange(10) + 100
>>> label
tensor([100, 101, 102, 103, 104, 105, 106, 107, 108, 109])
>>> torch.gather(label.expand(4, 10), dim=1, index=index.long()) # 进行聚合操作
tensor([[105, 107, 106],
    [102, 105, 108],
    [105, 109, 102],
    [107, 109, 106]])

把 label 扩展为二维数据后,以 index 中的每个数据为索引,取出在 label 中索引位置的数据,再以 index 的的位置摆放。

比如,最后得出的结果中,第一行的 105 就是 label.expand(4, 10) 中第一行中索引为 5 的数据,提取出来后放在 5 所在的位置。

 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python列表生成器的循环技巧分享
Mar 06 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
python实现手机通讯录搜索功能
Feb 22 Python
Python实现迭代时使用索引的方法示例
Jun 05 Python
对pandas通过索引提取dataframe的行方法详解
Feb 01 Python
用Python解决x的n次方问题
Feb 08 Python
对python中if语句的真假判断实例详解
Feb 18 Python
django 信号调度机制详解
Jul 19 Python
详解Python中的分支和循环结构
Feb 11 Python
Python3中FuzzyWuzzy库实例用法
Nov 18 Python
利用Python实现最小二乘法与梯度下降算法
Feb 21 Python
python spilt()分隔字符串的实现示例
May 21 Python
浅析PyTorch中nn.Linear的使用
Aug 18 #Python
Pytorch实现GoogLeNet的方法
Aug 18 #Python
PyTorch之图像和Tensor填充的实例
Aug 18 #Python
Pytorch Tensor的索引与切片例子
Aug 18 #Python
在PyTorch中Tensor的查找和筛选例子
Aug 18 #Python
对Pytorch神经网络初始化kaiming分布详解
Aug 18 #Python
pytorch中的embedding词向量的使用方法
Aug 18 #Python
You might like
桌面中心(一)创建数据库
2006/10/09 PHP
Yii中CGridView实现批量删除的方法
2015/12/28 PHP
用JavaScript获取网页中的js、css、Flash等文件
2006/12/20 Javascript
jQuery语法高亮插件支持各种程序源代码语法着色加亮
2013/04/27 Javascript
js获取IFRAME当前的URL的方法
2013/11/13 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
jQuery判断checkbox(复选框)是否被选中以及全选、反选实现代码
2014/02/21 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
div中文字内容溢出常见的解决方法
2017/03/16 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
Bootstrap 模态框自定义点击和关闭事件详解
2018/08/10 Javascript
jQuery实现表格隔行换色
2018/09/01 jQuery
在AngularJs中设置请求头信息(headers)的方法及不同方法的比较
2018/09/04 Javascript
Vue.js 中 axios 跨域访问错误问题及解决方法
2018/11/21 Javascript
详解vue项目接入微信JSSDK的坑
2018/12/14 Javascript
微信小程序实现商品属性联动选择
2019/02/15 Javascript
Node.js系列之连接DB的方法(3)
2019/08/30 Javascript
JavaScript键盘事件响应顺序详解
2019/09/30 Javascript
js实现简单的轮播图效果
2020/12/13 Javascript
javascript实现倒计时关闭广告
2021/02/09 Javascript
[04:04]显微镜下的DOTA2第六期——电影级别的华丽团战
2014/06/20 DOTA
[00:20]TI9不朽观赛名额抽取
2019/08/05 DOTA
[40:31]Secret vs Alliacne 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python中用于去除空格的三个函数的使用小结
2015/04/07 Python
详解Python文本操作相关模块
2017/06/22 Python
python模块之time模块(实例讲解)
2017/09/13 Python
Python异常对代码运行性能的影响实例解析
2018/02/08 Python
详解python持久化文件读写
2019/04/06 Python
css3一款3D字体带阴影效果的实现步骤
2013/03/20 HTML / CSS
你们项目是如何进行变更控制的
2015/08/26 面试题
应届生求职信
2014/05/31 职场文书
超市周年庆活动方案
2014/08/16 职场文书
出国签证在职证明
2014/09/20 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
新郎答谢词
2015/01/04 职场文书
2015年度个人工作总结报告
2015/10/24 职场文书