1. #Tensor索引操作
  2. '''''
  3. Tensor支持与numpy.ndarray类似的索引操作,语法上也类似
  4. 如无特殊说明,索引出来的结果与原tensor共享内存,即修改一个,另一个会跟着修改
  5. '''
  6. import torch as t
  7. a = t.randn(3,4)
  8. '''''tensor([[ 0.1986,  0.1809,  1.4662,  0.6693],
  9. [-0.8837, -0.0196, -1.0380,  0.2927],
  10. [-1.1032, -0.2637, -1.4972,  1.8135]])'''
  11. print(a[0])         #第0行
  12. '''''tensor([0.1986, 0.1809, 1.4662, 0.6693])'''
  13. print(a[:,0])       #第0列
  14. '''''tensor([ 0.1986, -0.8837, -1.1032])'''
  15. print(a[0][2])      #第0行第2个元素,等价于a[0,2]
  16. '''''tensor(1.4662)'''
  17. print(a[0][-1])     #第0行最后一个元素
  18. '''''tensor(0.6693)'''
  19. print(a[:2,0:2])    #前两行,第0,1列
  20. '''''tensor([[ 0.1986,  0.1809],
  21. [-0.8837, -0.0196]])'''
  22. print(a[0:1,:2])    #第0行,前两列
  23. '''''tensor([[0.1986, 0.1809]])'''
  24. print(a[0,:2])      #注意两者的区别,形状不同
  25. '''''tensor([0.1986, 0.1809])'''
  26. print(a>1)
  27. '''''tensor([[0, 0, 1, 0],
  28. [0, 0, 0, 0],
  29. [0, 0, 0, 1]], dtype=torch.uint8)'''
  30. print(a[a>1])        #等价于a.masked_select(a>1),选择结果与原tensor不共享内存空间
  31. print(a.masked_select(a>1))
  32. '''''tensor([1.4662, 1.8135])
  33. tensor([1.4662, 1.8135])'''
  34. print(a[t.LongTensor([0,1])])
  35. '''''tensor([[ 0.1986,  0.1809,  1.4662,  0.6693],
  36. [-0.8837, -0.0196, -1.0380,  0.2927]])'''
  37. '''''
  38. 常用的选择函数
  39. index_select(input,dim,index)   在指定维度dim上选取,列如选择某些列、某些行
  40. masked_select(input,mask)       例子如上,a[a>0],使用ByteTensor进行选取
  41. non_zero(input)                 非0元素的下标
  42. gather(input,dim,index)         根据index,在dim维度上选取数据,输出size与index一样
  43. gather是一个比较复杂的操作,对一个二维tensor,输出的每个元素如下:
  44. out[i][j] = input[index[i][j]][j]   #dim = 0
  45. out[i][j] = input[i][index[i][j]]   #dim = 1
  46. '''
  47. b = t.arange(0,16).view(4,4)
  48. '''''tensor([[ 0,  1,  2,  3],
  49. [ 4,  5,  6,  7],
  50. [ 8,  9, 10, 11],
  51. [12, 13, 14, 15]])'''
  52. index = t.LongTensor([[0,1,2,3]])
  53. print(b.gather(0,index))            #取对角线元素
  54. '''''tensor([[ 0,  5, 10, 15]])'''
  55. index = t.LongTensor([[3,2,1,0]]).t()       #取反对角线上的元素
  56. print(b.gather(1,index))
  57. '''''tensor([[ 3],
  58. [ 6],
  59. [ 9],
  60. [12]])'''
  61. index = t.LongTensor([[3,2,1,0]])           #取反对角线的元素,与上面不同
  62. print(b.gather(0,index))
  63. '''''tensor([[12,  9,  6,  3]])'''
  64. index = t.LongTensor([[0,1,2,3],[3,2,1,0]]).t()
  65. print(b.gather(1,index))
  66. '''''tensor([[ 0,  3],
  67. [ 5,  6],
  68. [10,  9],
  69. [15, 12]])'''
  70. '''''
  71. 与gather相对应的逆操作是scatter_,gather把数据从input中按index取出,而
  72. scatter_是把取出的数据再放回去,scatter_函数时inplace操作
  73. out = input.gather(dim,index)
  74. out = Tensor()
  75. out.scatter_(dim,index)
  76. '''
  77. x = t.rand(2, 5)
  78. print(x)
  79. c = t.zeros(3, 5).scatter_(0, t.LongTensor([[0, 1, 2, 0, 0], [2, 0, 0, 1, 2]]), x)
  80. print(c)
  81. 2018-10-23 20:30:30

Tensor索引操作的更多相关文章

  1. Pytorch Tensor 常用操作

    https://pytorch.org/docs/stable/tensors.html dtype: tessor的数据类型,总共有8种数据类型,其中默认的类型是torch.FloatTensor, ...

  2. pytorch(03)tensor的操作

    张量操作 一.张量的拼接 torch.cat() 功能:将张量按维度dim进行拼接,且[不会扩张张量的维度] tensors:张量序列 dim:要拼接的维度 torch.cat(tensors, di ...

  3. Mongodb学习笔记三(Mongodb索引操作及性能测试)

    第三章 索引操作及性能测试 索引在大数据下的重要性就不多说了 下面测试中用到了mongodb的一个客户端工具Robomongo,大家可以在网上选择下载.官网下载地址:http://www.robomo ...

  4. Elasticsearch-PHP 索引操作(转)

    索引操作 本节通过客户端来介绍一下索引API的各种操作.索引操作包含任何管理索引本身(例如,创建索引,删除索引,更改映射等等). 我们通过一些常见的操作的代码片段来介绍,然后在表格中列出剩下的方法.R ...

  5. ElasticSearch+Kibana 索引操作

    ElasticSearch+Kibana 索引操作 一 前言 ElasticiSearch 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引 ...

  6. Mysql之表的操作与索引操作

    表的操作: 1.表的创建: create table if not exists table_name(字段定义); 例子: create table if not exists user(id in ...

  7. 3.Lucene3.x API分析,Director 索引操作目录,Document,分词器

     1  Lucene卡发包结构分析 包名 功能 org.apache.lucene.analysis Analysis提供自带的各种Analyzer org.apache.lucene.colla ...

  8. SQL Server死锁诊断--同一行数据在不同索引操作下引起的死锁

    死锁概述 对于数据库中出现的死锁,通俗地解释就是:不同Session(会话)持有一部分资源,并且同时相互排他性地申请对方持有的资源,然后双方都得不到自己想要的资源,从而造成的一种僵持的现象.当然,在任 ...

  9. 获取列表的索引操作:enumerate

    通过循环获取列表的索引操作: 主要使用:enumerate product_list = [['Iphone7',5800], ['Coffee',30], ['疙瘩汤',10], ['Python ...

随机推荐

  1. word20170105订酒店 hotel reservation有用的词和句子

    有用的词: hotel reservation/booking: 酒店预订 standard room:标准间 suite: 套房 king size bed: 大床房 double bed:双床房 ...

  2. Java并发编程之美之并发编程线程基础

    什么是线程 进程是代码在数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,线程则是进程的一个执行路径,一个进程至少有一个线程,进程的多个线程共享进程的资源. java启动main函数其实就 ...

  3. 服务器 隐藏php版本,nginx版本号等

    隐藏php版本号: 打开php.ini配置文件  找到 expose_php 关键修改为 off 即可 重启后 web头部就不会有了 隐藏 nginx 服务器版本号: 打开nginx配置文件,在htt ...

  4. 2018-2019-2 网络对抗技术 20165325 Exp3 免杀原理与实践

    2018-2019-2 网络对抗技术 20165325 Exp3 免杀原理与实践 实验内容(概要) 一.正确使用msf编码器,msfvenom生成如jar之类的其他文件,veil-evasion,自己 ...

  5. selenium模块

    一 介绍 二 安装 三 基本使用 四 选择器 五 等待元素被夹在 元素交互操作 其他 项目联 一 介绍 selenium最初是一个自动化测试的工具,而爬虫中使用它主要是为了解决requests无法直接 ...

  6. 多个 Github 网站账号 的配置

    账号的基本配置可参考上篇 紧跟上篇已将config 文件配置好了,下面是多账号的配置 一, 多账号也是在config里面配置 1.   首先:  在git 里面输入命令: ll      可以看到  ...

  7. 无法获得VMCI驱动程序的版本:句柄无效

    解决方法: 查找到 vmci0.present="TRUE" 代码,将TRUE更改为FALSE保存即可

  8. 关于kafka生产者相关监控指标的理解(未解决)

    关于生产者相关的监控指标含义的理解,希望大神帮忙进行确定下.     这边找了官网,看了网上各样的资料,但都无法帮我理解监控项目相关含义.     相关的监控项目是从jconsole获取的,并接入到了 ...

  9. zabbix_agentd客户端安装与配置(windows操作系统)

    zabbix_agentd客户端安装与配置(windows操作系统)   **********  客户端操作   **********  标注:监控zabbix_agentd客户端安装对象是win s ...

  10. spring-第一章-基本用法

    一,简介 spring是一个开源框架 是一个非常强大的容器框架,分离项目组件之间的依赖关系,由spring容器管理整个项目的资源和配置; 通常我们可以称spring是容器大管家(项目大管家) 功能: ...