详解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原始套接字编程示例分享
Feb 21 Python
python daemon守护进程实现
Aug 27 Python
Python简单读取json文件功能示例
Nov 30 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
选择Python写网络爬虫的优势和理由
Jul 07 Python
解决Python设置函数调用超时,进程卡住的问题
Aug 08 Python
python-web根据元素属性进行定位的方法
Dec 13 Python
Python字典生成式、集合生成式、生成器用法实例分析
Jan 07 Python
Python守护进程实现过程详解
Feb 10 Python
使用numpy nonzero 找出非0元素
May 14 Python
Python中的套接字编程是什么?
Jun 21 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 文件上传进度条的两种实现方法的代码
2007/11/25 PHP
ThinkPHP3.0略缩图不能保存到子目录的解决方法
2012/09/30 PHP
php用header函数实现301跳转代码实例
2013/11/25 PHP
详解PHP中cookie和session的区别及cookie和session用法小结
2016/06/12 PHP
用javascript父窗口控制只弹出一个子窗口
2007/04/10 Javascript
jquery隐藏标签和显示标签的实例
2013/11/11 Javascript
jQuery实现带延迟效果的滑动菜单代码
2015/09/02 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
nodejs对express中next函数的一些理解
2017/09/08 NodeJs
详解React Native开源时间日期选择器组件(react-native-datetime)
2017/09/13 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
node使用Koa2搭建web项目的方法
2017/10/17 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
深入理解requireJS-实现一个简单的模块加载器
2018/01/15 Javascript
详解es6新增数组方法简便了哪些操作
2019/05/09 Javascript
python采用requests库模拟登录和抓取数据的简单示例
2014/07/05 Python
在Python中操作字符串之rstrip()方法的使用
2015/05/19 Python
Python中使用支持向量机SVM实践
2017/12/27 Python
用TensorFlow实现lasso回归和岭回归算法的示例
2018/05/02 Python
Python 按字典dict的键排序,并取出相应的键值放于list中的实例
2019/02/12 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
用python对excel进行操作(读,写,修改)
2020/12/25 Python
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
传媒专业推荐信范文
2013/11/23 职场文书
办护照工作证明范本
2014/01/14 职场文书
教师校本培训方案
2014/02/26 职场文书
财务管理专业自荐书
2014/09/02 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
毕业生自荐信范文
2015/03/05 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书
毕业设计工作总结
2015/08/14 职场文书
2016年优秀团支部事迹材料
2016/02/26 职场文书
村党总支部公开承诺书2016
2016/03/25 职场文书
Go语言安装并操作redis的go-redis库
2022/04/14 Golang
PYTHON 使用 Pandas 删除某列指定值所在的行
2022/04/28 Python