详解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中的yield与generator
Apr 05 Python
Python使用Selenium模块实现模拟浏览器抓取淘宝商品美食信息功能示例
Jul 18 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
python可视化实现代码
Jan 15 Python
python根据文章标题内容自动生成摘要的实例
Feb 21 Python
Python、 Pycharm、Django安装详细教程(图文)
Apr 12 Python
python socket通信编程实现文件上传代码实例
Dec 14 Python
使用Python制作缩放自如的圣诞老人(圣诞树)
Dec 25 Python
python PIL/cv2/base64相互转换实例
Jan 09 Python
python:HDF和CSV存储优劣对比分析
Jun 08 Python
python 下载文件的几种方式分享
Apr 07 Python
Python Numpy之linspace用法说明
Apr 17 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
如何将数据从文本导入到mysql
2006/10/09 PHP
PHP在特殊字符前加斜杠的实现代码
2011/07/17 PHP
php微信公众号js-sdk开发应用
2016/11/28 PHP
thinkPHP中session()方法用法详解
2016/12/08 PHP
根据鼠标的位置动态的控制层的位置
2009/11/24 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
JavaScript中的类(Class)详细介绍
2014/12/30 Javascript
javaScript基础语法介绍
2015/02/28 Javascript
JavaScript严格模式详解
2015/11/18 Javascript
jQuery模拟完美实现经典FLASH导航动画效果【附demo源码下载】
2016/11/09 Javascript
微信小程序-小说阅读小程序实例(demo)
2017/01/12 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
基于Bootstrap table组件实现多层表头的实例代码
2017/09/07 Javascript
javaScript手机号码校验工具类PhoneUtils详解
2017/12/08 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
vue vantUI tab切换时 list组件不触发load事件的问题及解决方法
2020/02/14 Javascript
详解JavaScript 事件流
2020/09/02 Javascript
JS相册图片抖动放大展示效果的示例代码
2021/01/29 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
用python代码做configure文件
2014/07/20 Python
Python 实现数据库(SQL)更新脚本的生成方法
2017/07/09 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
python switch 实现多分支选择功能
2020/12/21 Python
JSP和EJB可以共享HttpSession么?EJB里面可以改变session里面的内容
2013/06/05 面试题
法律专业自我鉴定
2013/10/03 职场文书
大学生求职自荐信
2013/12/12 职场文书
大学生学习自我评价
2014/01/13 职场文书
青岛海底世界导游词
2015/02/11 职场文书
雷锋之歌观后感
2015/06/10 职场文书
2019关于垃圾分类处理的调查报告
2019/12/26 职场文书
Python爬虫基础讲解之请求
2021/05/13 Python
详解Python为什么不用设计模式
2021/06/24 Python