Tensor索引操作

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

免责声明:文章转载自《Tensor索引操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Mac系统修改Intellij Idea默认JDK版本CSS布局:水平居中下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

js Base64与字符串互转

1、base64加密在页面中引入base64.js文件,调用方法为:˂!...

mac格式化重装系统

4.选择“重新安装MacOS”5.按照以下步骤中的提示进行操作。安装需要半个多小时。在此期间无法断开网络,否则需要重新安装...

mac 安装xcode命令行工具

重印:https://segmentfault.com/a/1190000018045211?utm_source=tag-Newest1.启动终端,输入命令:xcode select--install,然后一直单击install。2.安装成功后,输入命令:gcc-v以检查是否成功。如果在第一步中报告了错误,提示为:xcode select:error:co...

win10 .net3.5的问题及解决方案

小编下面就介绍win1064位系统无法安装Netframework3.5的两种解决方案吧在Windows10中,当我们安装某些软件的时候会提示“你的电脑上的应用需要使用以下Windows功能:.NETFramework3.5”。但近日有网友反映在windows10_64位系统电脑上安装Netframework3.5,操作时总是遇到失败的情况。下面小编就为大家...

vue升级Babel支持可选链和合并空值运算符

据我所知,无论是webpack项目还是vite项目都需要使用到babel来编译文件。currentItem:tips;}//template使用传入对应的取值地址:string{{text_filter}}其他可玩的ES新特性通过babel的官网,我们可以看到babel支持的"ES新特性"参考:babeljs.io/docs/en/plu…挑几个有意思的说明...

mac vscode 下载安装与配置

我觉得这太复杂了。只需直接缩放图像。png2)修改右侧图像上编辑器的文本大小。png...