Tensor索引操作
- #Tensor索引操作
- '''''
- Tensor支持与numpy.ndarray类似的索引操作,语法上也类似
- 如无特殊说明,索引出来的结果与原tensor共享内存,即修改一个,另一个会跟着修改
- '''
- import torch as t
- a = t.randn(3,4)
- '''''tensor([[ 0.1986, 0.1809, 1.4662, 0.6693],
- [-0.8837, -0.0196, -1.0380, 0.2927],
- [-1.1032, -0.2637, -1.4972, 1.8135]])'''
- print(a[0]) #第0行
- '''''tensor([0.1986, 0.1809, 1.4662, 0.6693])'''
- print(a[:,0]) #第0列
- '''''tensor([ 0.1986, -0.8837, -1.1032])'''
- print(a[0][2]) #第0行第2个元素,等价于a[0,2]
- '''''tensor(1.4662)'''
- print(a[0][-1]) #第0行最后一个元素
- '''''tensor(0.6693)'''
- print(a[:2,0:2]) #前两行,第0,1列
- '''''tensor([[ 0.1986, 0.1809],
- [-0.8837, -0.0196]])'''
- print(a[0:1,:2]) #第0行,前两列
- '''''tensor([[0.1986, 0.1809]])'''
- print(a[0,:2]) #注意两者的区别,形状不同
- '''''tensor([0.1986, 0.1809])'''
- print(a>1)
- '''''tensor([[0, 0, 1, 0],
- [0, 0, 0, 0],
- [0, 0, 0, 1]], dtype=torch.uint8)'''
- print(a[a>1]) #等价于a.masked_select(a>1),选择结果与原tensor不共享内存空间
- print(a.masked_select(a>1))
- '''''tensor([1.4662, 1.8135])
- tensor([1.4662, 1.8135])'''
- print(a[t.LongTensor([0,1])])
- '''''tensor([[ 0.1986, 0.1809, 1.4662, 0.6693],
- [-0.8837, -0.0196, -1.0380, 0.2927]])'''
- '''''
- 常用的选择函数
- index_select(input,dim,index) 在指定维度dim上选取,列如选择某些列、某些行
- masked_select(input,mask) 例子如上,a[a>0],使用ByteTensor进行选取
- non_zero(input) 非0元素的下标
- gather(input,dim,index) 根据index,在dim维度上选取数据,输出size与index一样
- gather是一个比较复杂的操作,对一个二维tensor,输出的每个元素如下:
- out[i][j] = input[index[i][j]][j] #dim = 0
- out[i][j] = input[i][index[i][j]] #dim = 1
- '''
- b = t.arange(0,16).view(4,4)
- '''''tensor([[ 0, 1, 2, 3],
- [ 4, 5, 6, 7],
- [ 8, 9, 10, 11],
- [12, 13, 14, 15]])'''
- index = t.LongTensor([[0,1,2,3]])
- print(b.gather(0,index)) #取对角线元素
- '''''tensor([[ 0, 5, 10, 15]])'''
- index = t.LongTensor([[3,2,1,0]]).t() #取反对角线上的元素
- print(b.gather(1,index))
- '''''tensor([[ 3],
- [ 6],
- [ 9],
- [12]])'''
- index = t.LongTensor([[3,2,1,0]]) #取反对角线的元素,与上面不同
- print(b.gather(0,index))
- '''''tensor([[12, 9, 6, 3]])'''
- index = t.LongTensor([[0,1,2,3],[3,2,1,0]]).t()
- print(b.gather(1,index))
- '''''tensor([[ 0, 3],
- [ 5, 6],
- [10, 9],
- [15, 12]])'''
- '''''
- 与gather相对应的逆操作是scatter_,gather把数据从input中按index取出,而
- scatter_是把取出的数据再放回去,scatter_函数时inplace操作
- out = input.gather(dim,index)
- out = Tensor()
- out.scatter_(dim,index)
- '''
- x = t.rand(2, 5)
- print(x)
- c = t.zeros(3, 5).scatter_(0, t.LongTensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]]), x)
- print(c)
- 2018-10-23 20:30:30
Tensor索引操作的更多相关文章
- Pytorch Tensor 常用操作
https://pytorch.org/docs/stable/tensors.html dtype: tessor的数据类型,总共有8种数据类型,其中默认的类型是torch.FloatTensor, ...
- pytorch(03)tensor的操作
张量操作 一.张量的拼接 torch.cat() 功能:将张量按维度dim进行拼接,且[不会扩张张量的维度] tensors:张量序列 dim:要拼接的维度 torch.cat(tensors, di ...
- Mongodb学习笔记三(Mongodb索引操作及性能测试)
第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...
- Elasticsearch-PHP 索引操作(转)
索引操作 本节通过客户端来介绍一下索引API的各种操作.索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等). 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法.R ...
- ElasticSearch+Kibana 索引操作
ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...
- Mysql之表的操作与索引操作
表的操作: 1.表的创建: create table if not exists table_name(字段定义); 例子: create table if not exists user(id in ...
- 3.Lucene3.x API分析,Director 索引操作目录,Document,分词器
1 Lucene卡发包结构分析 包名 功能 org.apache.lucene.analysis Analysis提供自带的各种Analyzer org.apache.lucene.colla ...
- SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁
死锁概述 对于数据库中出现的死锁,通俗地解释就是:不同Session(会话)持有一部分资源,并且同时相互排他性地申请对方持有的资源,然后双方都得不到自己想要的资源,从而造成的一种僵持的现象.当然,在任 ...
- 获取列表的索引操作:enumerate
通过循环获取列表的索引操作: 主要使用:enumerate product_list = [['Iphone7',5800], ['Coffee',30], ['疙瘩汤',10], ['Python ...
随机推荐
- 二、初始化superset
上一步成功安装了superset, 1.初始化数据 创建命令 #创建管理员账号fabmanager create-admin --app superset#cd到superset 根目录参考路径 C: ...
- python numpy 间的的数据变算公式
import numpy as np a = np.arange(100) print(np.sum(a))#求和 print(np.mean(a))#平均值 print(np.max(a))#最大值 ...
- WPF入门之一APP.XAML
WPF运行之后,App.xaml是应用的声明起始点. 一.指定入口 通过指定Application 的StartupUri属性,指示了启动应用的时候,加载哪个窗口或网页. 最常见的就是将默认的Main ...
- 013_UDP专项研究监控
数据源: /proc/net/snmp; 采集方式:累计值,每10秒采集一次取差值: 指标:net.snmp.udp (key: system); Out Datagrams: udp层发送的数据包总 ...
- PHP常用方法整理
最近开始写PHP项目,各种常用的方法简单整理一下,以备后用. 1. Xml转Json json_decode(json_encode(simplexml_load_string($xml, 'Sim ...
- topological sort~~~~初学
今天讲了topological sort 问题: 判环:记录入队的点数,若<n则有环,可证: 算法:o(n):queue or stack,而不是o(n^2)枚举 #. 关系运算图(vijos ...
- 烽火2640路由器命令行手册-12-IBM网络配置命令
IBM网络配置命令 目 录 第1章 DLSW配置命令... 1 1.1 DLSW配置命令... 1 1.1.1 dlsw local-peer 1 1.1.2 dlsw remote-peer 3 ...
- 深入理解position属性&containing block
一.包含块(Containing Block) 要讲position,首先就涉及到一个概念:包含块. 1.包含块介绍 包含块简单理解就是一个定位参考块,就是"大盒子里套小盒子"中那 ...
- 【pG&&CYH-01】元旦联欢会
题解: t1: 题解是循环矩阵 但我并没有往矩阵上想下去... 这个东西比较显然的是可以把它看成生成函数 然后就可以任意模数fft了 复杂度比题解优 $nlog^2$ t2: 随便推推式子就好了 t3 ...
- 前端工具mock的使用 - 造数据模拟网络请求
前后端同步开发过程中,有时候前端页面完成了,需要等待后端接口完成部署后才能联调. 这个时候如果不想等待,想自己造数据模拟网络请求,这种情况就能用到mock工具了. mock工具可以用在web网站,也能 ...