详解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打印scrapy蜘蛛抓取树结构的方法
Apr 08 Python
Python 遍历列表里面序号和值的方法(三种)
Feb 17 Python
Python 专题六 局部变量、全局变量global、导入模块变量
Mar 20 Python
Python排序搜索基本算法之希尔排序实例分析
Dec 09 Python
python 实时得到cpu和内存的使用情况方法
Jun 11 Python
解决python3 安装完Pycurl在import pycurl时报错的问题
Oct 15 Python
python多线程使用方法实例详解
Dec 30 Python
pyautogui自动化控制鼠标和键盘操作的步骤
Apr 01 Python
为2021年的第一场雪锦上添花:用matplotlib绘制雪花和雪景
Jan 05 Python
解决numpy数组互换两行及赋值的问题
Apr 17 Python
用基于python的appium爬取b站直播消费记录
Apr 17 Python
Django项目如何获得SSL证书与配置HTTPS
Apr 30 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
PHP实现下载功能的代码
2012/09/29 PHP
php中{}大括号是什么意思
2013/12/01 PHP
PHP中使用数组指针函数操作数组示例
2014/11/19 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
PHP实现普通hash分布式算法简单示例
2018/08/06 PHP
Jquery 插件开发笔记整理
2011/01/17 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
使用JavaScript判断手机浏览器是横屏还是竖屏问题
2016/08/02 Javascript
localStorage实现便签小程序
2016/11/28 Javascript
微信小程序图片宽100%显示并且不变形
2017/06/21 Javascript
bootstrap基本配置_动力节点Java学院整理
2017/07/14 Javascript
jQuery扇形定时器插件pietimer使用方法详解
2017/07/18 jQuery
vue的token刷新处理的方法
2018/07/17 Javascript
4个顶级开源JavaScript图表库
2018/09/29 Javascript
图文讲解vue的v-if使用方法
2019/02/11 Javascript
javascript头像上传代码实例
2019/09/28 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
解决echarts echarts数据动态更新和dataZoom被重置问题
2020/07/20 Javascript
[51:17]完美世界DOTA2联赛循环赛Inki vs DeMonsTer 第二场 10月30日
2020/10/31 DOTA
python在windows下实现备份程序实例
2014/07/04 Python
Python常用的文件及文件路径、目录操作方法汇总介绍
2015/05/21 Python
Python3多线程爬虫实例讲解代码
2018/01/05 Python
pandas DataFrame 行列索引及值的获取的方法
2019/07/02 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
军神教学反思
2014/02/04 职场文书
开朗女孩的自我评价
2014/02/10 职场文书
大学新生军训感言
2014/02/25 职场文书
合作意向书模板
2014/03/31 职场文书
大学生精神文明先进个人事迹材料
2014/05/02 职场文书
竞聘自述材料
2014/08/25 职场文书
初三毕业评语
2014/12/26 职场文书
清明节寄语2015
2015/03/23 职场文书
开业典礼致辞
2015/07/29 职场文书
机关干部纪律作风整顿心得体会
2016/01/23 职场文书