详解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 相关文章推荐
pymongo为mongodb数据库添加索引的方法
May 11 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
python的dataframe转换为多维矩阵的方法
Apr 11 Python
用python脚本24小时刷浏览器的访问量方法
Dec 07 Python
python简单贪吃蛇开发
Jan 28 Python
Python实现查找字符串数组最长公共前缀示例
Mar 27 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
Apr 15 Python
Pyorch之numpy与torch之间相互转换方式
Dec 31 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
django queryset相加和筛选教程
May 18 Python
如何在Win10系统使用Python3连接Hive
Oct 15 Python
分享提高 Python 代码的可读性的技巧
Mar 03 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常用技巧汇总
2016/03/04 PHP
PHP实现二维数组按照指定的字段进行排序算法示例
2019/04/23 PHP
不一样的文字闪烁 轮番闪烁
2009/11/11 Javascript
jquery与google map api结合使用 控件,监听器
2010/03/04 Javascript
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
深入理解JavaScript系列(14) 作用域链介绍(Scope Chain)
2012/04/12 Javascript
浅谈jQuery before和insertBefore的区别
2016/12/04 Javascript
常用的几个JQuery代码片段
2017/03/13 Javascript
vue引用js文件的多种方式(推荐)
2018/05/17 Javascript
JS根据json数组多个字段排序及json数组常用操作
2019/06/06 Javascript
iview的table组件自带的过滤器实现
2019/07/12 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
[52:06]完美世界DOTA2联赛决赛日 Inki vs LBZS 第一场 11.08
2020/11/10 DOTA
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
Python CSV模块使用实例
2015/04/09 Python
Python中使用ElementTree解析XML示例
2015/06/02 Python
教你用 Python 实现微信跳一跳(Mac+iOS版)
2018/01/04 Python
python让列表倒序输出的实例
2018/06/25 Python
Python 从相对路径下import的方法
2018/12/04 Python
python将控制台输出保存至文件的方法
2019/01/07 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
Python使用Socket实现简单聊天程序
2020/02/28 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Python同时迭代多个序列的方法
2020/07/28 Python
详解Selenium-webdriver绕开反爬虫机制的4种方法
2020/10/28 Python
Python 实现键盘鼠标按键模拟
2020/11/18 Python
python tkinter实现下载进度条及抖音视频去水印原理
2021/02/07 Python
pyx文件 生成pyd 文件用于 cython调用的实现
2021/03/04 Python
html5 Web SQL Database 之事务处理函数transaction与executeSQL解析
2013/11/07 HTML / CSS
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
在线购买世界上最好的酒:BoozeBud
2018/06/07 全球购物
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
什么叫做SQL注入,如何防止
2016/10/04 面试题
2015年基层党支部工作总结
2015/05/21 职场文书
类和原型的设计模式之复制与委托差异
2022/07/07 Javascript