详解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 31 Python
python创建进程fork用法
Jun 04 Python
常见python正则用法的简单实例
Jun 21 Python
JSON Web Tokens的实现原理
Apr 02 Python
python 连接sqlite及简单操作
Jun 30 Python
解决pycharm回车之后不能换行或不能缩进的问题
Jan 16 Python
对Python定时任务的启动和停止方法详解
Feb 19 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
python smtplib发送多个email联系人的实现
Oct 09 Python
Python实现邮件发送的详细设置方法(遇到问题)
Jan 18 Python
pytorch 如何把图像数据集进行划分成train,test和val
May 31 Python
python模拟浏览器 使用selenium进入好友QQ空间并留言
Apr 12 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数组赋值方法
2015/11/07 PHP
统计PHP目录中的文件数方法
2019/03/05 PHP
laravel 实现划分admin和home 模块分组
2019/10/15 PHP
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
JavaScript中的parse()方法使用简介
2015/06/12 Javascript
基于JS实现的倒计时程序实例
2015/07/24 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
jquery简单倒计时实现方法
2015/12/18 Javascript
jQuery表格插件datatables用法汇总
2016/03/29 Javascript
jQuery siblings()用法实例详解
2016/04/26 Javascript
BootStrap初学者对弹出框和进度条的使用感觉
2016/06/27 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
2016/09/01 Javascript
HTML5 实现的一个俄罗斯方块实例代码
2016/09/19 Javascript
深入理解JS中的Function.prototype.bind()方法
2016/10/11 Javascript
jQuery内存泄露解决办法
2016/12/13 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
JavaScript实现省市联动过程中bug的解决方法
2017/12/04 Javascript
angularJs中orderBy筛选以及filter过滤数据的方法
2018/09/30 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
vue自定义组件(通过Vue.use()来使用)即install的用法说明
2020/08/11 Javascript
[01:11:28]DOTA2-DPC中国联赛定级赛 RNG vs Phoenix BO3第一场 1月8日
2021/03/11 DOTA
python在linux中输出带颜色的文字的方法
2014/06/19 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
Python 获取中文字拼音首个字母的方法
2018/11/28 Python
Python安装selenium包详细过程
2019/07/23 Python
python绘制无向图度分布曲线示例
2019/11/22 Python
python基于三阶贝塞尔曲线的数据平滑算法
2019/12/27 Python
Python实现猜年龄游戏代码实例
2020/03/25 Python
matplotlib阶梯图的实现(step())
2021/03/02 Python
HTML5中的强制下载属性download使用实例解析
2016/05/12 HTML / CSS
若干个Java基础面试题
2015/05/19 面试题
电大学习个人自我评价范文
2013/10/04 职场文书
公司员工体检通知
2015/04/21 职场文书
使用Python获取字典键对应值的方法
2022/04/26 Python