原文:https://www.cnblogs.com/hellcat/p/8445250.html

一、普通索引

示例

1

2

3

4

5

= t.Tensor(4,5)

print(a)

print(a[0:1,:2])

print(a[0,:2])  # 注意和前一种索引出来的值相同,shape不同

print(a[[1,2]])  # 容器索引

 3.3845e+15  0.0000e+00  3.3846e+15  0.0000e+00  3.3845e+150.0000e+00  3.3845e+15  0.0000e+00  3.3418e+15  0.0000e+003.3845e+15  0.0000e+00  3.3846e+15  0.0000e+00  0.0000e+000.0000e+00  1.5035e+38  8.5479e-43  1.5134e-43  1.2612e-41
[torch.FloatTensor of size 4x5]3.3845e+15  0.0000e+00
[torch.FloatTensor of size 1x2]3.3845e+150.0000e+00
[torch.FloatTensor of size 2]0.0000e+00  3.3845e+15  0.0000e+00  3.3418e+15  0.0000e+003.3845e+15  0.0000e+00  3.3846e+15  0.0000e+00  0.0000e+00
[torch.FloatTensor of size 2x5]

普通索引内存分析

普通索引后的结果和原Tensor的内存共享

1

2

3

4

5

print(a[a>1])

import copy

= copy.deepcopy(a)

a[a>1]=10

print(a,b)

 3.3845e+153.3846e+153.3845e+153.3845e+153.3418e+153.3845e+153.3846e+151.5035e+38
[torch.FloatTensor of size 8]10.0000   0.0000  10.0000   0.0000  10.00000.0000  10.0000   0.0000  10.0000   0.000010.0000   0.0000  10.0000   0.0000   0.00000.0000  10.0000   0.0000   0.0000   0.0000
[torch.FloatTensor of size 4x5]3.3845e+15  0.0000e+00  3.3846e+15  0.0000e+00  3.3845e+150.0000e+00  3.3845e+15  0.0000e+00  3.3418e+15  0.0000e+003.3845e+15  0.0000e+00  3.3846e+15  0.0000e+00  0.0000e+000.0000e+00  1.5035e+38  8.5479e-43  1.5134e-43  1.2612e-41
[torch.FloatTensor of size 4x5]
array([[  1.00000000e+01,   0.00000000e+00,   1.00000000e+01,0.00000000e+00,   1.00000000e+01],[  0.00000000e+00,   1.00000000e+01,   0.00000000e+00,1.00000000e+01,   0.00000000e+00],[  1.00000000e+01,   0.00000000e+00,   1.00000000e+01,0.00000000e+00,   0.00000000e+00],[  0.00000000e+00,   1.00000000e+01,   8.54792063e-43,1.51340234e-43,   1.26116862e-41]], dtype=float32)

索引函数gather介绍

方的介绍: 
如果input是一个n维的tensor,size为 (x0,x1…,xi−1,xi,xi+1,…,xn−1),dim为i,然后index必须也为n维tensor,size为 (x0,x1,…,xi−1,y,xi+1,…,xn−1),其中y >= 1,最后输出的out与index的size是一样的。 
意思就是按照一个指定的轴(维数)收集值 
对于一个三维向量来说:

1

2

3

out[i][j][k] = input[index[i][j][k]][j][k]  # if dim == 0

out[i][j][k] = input[i][index[i][j][k]][k]  # if dim == 1

out[i][j][k] = input[i][j][index[i][j][k]]  # if dim == 2

参数: 
input (Tensor) – 源tensor 
dim (int) – 指定的轴数(维数) 
index (LongTensor) – 需要聚集起来的数据的索引 
out (Tensor, optional) – 目标tensor

简单来说,就是在Tensor(input)的众多维度中针对某一维度(dim参数),使用一维Tensor(index)进行索引,并对其他维度进行遍历。

1

2

3

4

5

6

7

8

9

10

= t.arange(16).view(4,4)

index = t.LongTensor([[0,1,2,3]])

print(a)

print(index)

print(a.gather(0,index))

# 逆操作scatter_,注意是inplace的

= t.zeros(4,4)

b.scatter_(0,index,a.gather(0,index))

print(b)

  0   1   2   34   5   6   78   9  10  1112  13  14  15
[torch.FloatTensor of size 4x4]0  1  2  3
[torch.LongTensor of size 1x4]0   5  10  15
[torch.FloatTensor of size 1x4]0   0   0   00   5   0   00   0  10   00   0   0  15
[torch.FloatTensor of size 4x4]

二、高阶索引

和普通索引不同,高阶索引前后一般不会共享内存,后面介绍Tensor内存结构时会提到。

1

2

3

4

= t.arange(0,27).view(3,3,3)

print(x)

print(x[[1,2],[1,2],[2,0]])  # x[1,1,2]和x[2,2,0]

print(x[[2,1,0],[0],[0]])  # x[2,0,0]和x[1,0,0]和x[0,0,0]

(0 ,.,.) = 0   1   23   4   56   7   8(1 ,.,.) = 9  10  1112  13  1415  16  17(2 ,.,.) = 18  19  2021  22  2324  25  26
[torch.FloatTensor of size 3x3x3]1424
[torch.FloatTensor of size 2]1890
[torch.FloatTensor of size 3]

pytorch 索引相关推荐

  1. PyTorch与向量化计算

    还是先认错啊  只为自己好加标签 自己看方便~~ 向量化计算是一种特殊的并行计算方式.程序在同一时间内只执行一个操作,而并行计算可以在同一时间内执行多个操作.向量化计算是指对不同的数据执行同样的一个或 ...

  2. fastai 2019 lesson9 notes 笔记

    lesson9 How to train your model 本文markdown源文件:lesson9.md 2019年视频地址:https://course19.fast.ai/videos/? ...

  3. 《动手学深度学习》—学习笔记

    文章目录 深度学习简介 起源 特点 小结 预备知识 获取和运行本书的代码 pytorch环境安装 方式一 方式二 数据操作 创建 运算 广播机制 索引 运算的内存开销 NDArray和NumPy相互变 ...

  4. Isaac-gym(8):Tensor API

    希望和正在或者想要学习使用ISAAC-GYM的朋友一起有一个讨论群,尝试互帮互助,交流学习内容~ 目前刚开始尝试,不知道能不能建立起来,如果有意向请私戳!! --2023.02 1. 模拟设置 ten ...

  5. PyTorch官方教程大更新:增加标签索引,更加新手友好

    点击上方↑↑↑"视学算法"关注我 来源:公众号 量子位 授权 PyTorch官方教程,现已大幅更新: 提供标签索引,增加主题分类,更加新手友好. 不必再面对一整页教学文章茫然无措, ...

  6. pytorch 几个不同获得索引的方法

    pytorch 几个不同获得索引的方法 https://blog.csdn.net/luolinll1212/article/details/82224491 2018年08月30日 17:08:36 ...

  7. PyTorch官方教程大更新:增加标签索引,新手更加友好

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作分享,不代表本公众号立场,侵权联系删除 转载于:量子位 AI博士笔记系列推荐 周志华<机器学习>手推 ...

  8. Pytorch——如何创建一个tensor与索引和切片(一)

    创建Tensor numpy是一个非常常见的数据的一个载体,数据可以先从numpy中间先导进tensor来: 1.从numpy引入 import from numpy a=np.array([2,3. ...

  9. 【Pytorch深度学习实践】B站up刘二大人课程笔记——目录与索引(已完结)

    从有代码的课程开始讨论 [Pytorch深度学习实践]B站up刘二大人之LinearModel -代码理解与实现(1/9) [Pytorch深度学习实践]B站up刘二大人之 Gradient Desc ...

最新文章

  1. 无线节能组信标为什么会自动切换? 排查故障的过程真的像谜一样无法解释
  2. 斯坦福机器学习公开课学习笔记(2)—监督学习 梯度下降
  3. EAST算法超详细源码解析:数据预处理与标签生成
  4. struct和typedef struct用法
  5. anaconda下载的python在哪_python包管理器anaconda介绍安装和使用
  6. Twproject Gantt – 开源的 JavaScript 甘特图组件
  7. Android Problem- android.content.res.Resources$NotFoundException: String resource ID #0xa
  8. ubuntu切换python版本
  9. 有限状态机 Finite State Machine(FSM)
  10. 仿链家地图找房_【前端-自如/链家/安居客-地图找房】地图api如何获取浏览器视野范围内的经纬度区间?...
  11. matlab的做潮流计算,Matlab实现潮流计算程序
  12. 微信小程序tabBar闪烁问题
  13. arduinouno的地是相连的吗_如何连接地线是最标准的,能起到保障的作用吗?
  14. 贪心科技NLP训练营成果展示(附视频回放)
  15. 大数据系列之Java调用elasticsearch的增删查改聚合
  16. 美丽世界的另一面!(请保护好你身边的亲朋好友)
  17. 应用宝上线应用后一直处于审核状态问题解决
  18. 《Android Studio从入门到精通》读后感,电子书PDF百度网盘下载
  19. 计算机网络设备的种类,计算机网络设备选型依据.ppt
  20. vue Component inside <Transition> renders non-element root node that cannot be animated.

热门文章

  1. 华为备忘录导入印记云笔记_原来华为手机自带会议神器,开会不用手写,这个功能就能搞定...
  2. 安装mysql总是未响应状态_求助啊 WIN7下安装mysql出问题 老是说未响应~!!
  3. mysql修改字段为现在时间_mysql如何修改字段自动生成时间
  4. 查题接口 源码 php 爬题,大学网课查题公众号查题教程_网课查题题库接口API-在线搜答案...
  5. java rootpath_Java 获取webapp,Root,classpath,项目等路径工具类
  6. shiro 没有注销再登录_Shiro 详细介绍 068
  7. python多线程输出_Python多线程
  8. 文件 服务器 要求,文件服务器硬件要求
  9. 我是非计算机专业学生,非计算机专业学生怎么走上计算机技术之路?
  10. linux无法挂载移动硬盘6,FC6下挂载NTFS移动硬盘,无法读取