详解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内置数据结构与操作符的练习题集锦
Jul 01 Python
Python 转义字符详细介绍
Mar 21 Python
简单实现python画圆功能
Jan 25 Python
Python解析并读取PDF文件内容的方法
May 08 Python
使用Python做定时任务及时了解互联网动态
May 15 Python
对Python 简单串口收发GUI界面的实例详解
Jun 12 Python
Python对Tornado请求与响应的数据处理
Feb 12 Python
详解如何在PyCharm控制台中输出彩色文字和背景
Aug 17 Python
Python字典dict常用方法函数实例
Nov 09 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
Nov 28 Python
对Keras自带Loss Function的深入研究
May 25 Python
python程序的组织结构详解
Dec 06 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
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
国外比较好的几个的Php开源建站平台小结
2010/04/22 PHP
Php获取金书网的书名的实现代码
2010/06/11 PHP
php获取post中的json数据的实现方法
2011/06/08 PHP
PHP输出XML到页面的3种方法详解
2013/06/06 PHP
配置eAccelerator和XCache扩展来加速PHP程序的执行
2015/12/22 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
PHP处理bmp格式图片的方法分析
2017/07/04 PHP
ThinkPHP防止重复提交表单的方法实例分析
2018/05/10 PHP
Laravel框架路由设置与使用示例
2018/06/12 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
document.documentElement && document.documentElement.scrollTop
2007/12/01 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
教你用javascript实现随机标签云效果_附代码
2016/03/16 Javascript
JavaScript用JSONP跨域请求数据实例详解
2017/01/06 Javascript
js放大镜放大购物图片效果
2017/01/18 Javascript
JavaScript中三种常见的排序方法
2017/02/24 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
详谈jQuery Ajax(load,post,get,ajax)的用法
2017/03/02 Javascript
基于JavaScript实现弹幕特效
2020/08/27 Javascript
vue-cli初始化项目中使用less的方法
2018/08/09 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
[03:06]2018年度CS GO最具人气解说-完美盛典
2018/12/16 DOTA
python docx 中文字体设置的操作方法
2018/05/08 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
pycharm 将django中多个app放到同个文件夹apps的处理方法
2018/05/30 Python
利用django-suit模板添加自定义的菜单、页面及设置访问权限
2018/07/13 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
Python连接Impala实现步骤解析
2020/08/04 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
国际商务专业学生个人的自我评价
2013/09/28 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
工作检讨书500字
2014/10/19 职场文书