torch.gather简单教程

形式:

C=A.gather(dim,B)

其中A为原始矩阵,B为下标矩阵,C为结果矩阵。

函数目的:借助下标依次递增的潜规则,取出原始矩阵A中,与下标矩阵B对应的部分。

注:

  1. C与B的尺寸一致——体现“对应性”
  2. A与B的尺寸size不需要一致(比如3,3与1,3),但维度必须一致(比如都是两个维度)——更具体一点,A和B之间只是dim参数对应的维度不用保持一致,其余维度也是一致的

举例,对于原始矩阵A

取下标矩阵C=[[2,1,0]],我们进行如下操作

解释:9,7,5产生的原因——dim取0,表示第0维取对应的下标数字,而其他维度对应递增即可。因为一共就2个维度,与[[2,1,0]]适配的,就是[[0,1,2]]——(最外面的括号对应维度0,里面一层对应维度1。可见,维度0固定不变,维度1内部依次递增)。

所以[[2,1,0]]对应的,其实就是第0维度之外的(剩下就只有第1维度)1维度依次递增的[[0,1,2]],即2,0->9; 1,1->7; 0,2->5

但是,如果我们想取第一列的话,怎么办呢,可以像这样

像这样, 同样是第0维度不变,[[2],[1],[0]]中的,[2],[1],[0]都是在最外层[]的第0维度中,所以1维度就不依次递增了,即2,0->9;1,0->6;0,0->3。

要继续体现依次递增的话,我们可以扩充[0],[1],[2]的内部,如

 在这里,[2,2],[1,1],[0,0]各自内部的行下标就不依次递增(同为第0/1/2行),但之间的列下标就依次递增了(0->1)

类似的,如果取第1维度固定,下标维度还是[[2,1,0]]的话

 得到5,4,3的原因则是类似的,这里第1维度固定,而剩下的第0维度[[2,1,0]]只有1个数组,实际上也就依次递增是不变的,即[0,0,0],就有0,2->5;0,1->4;0,0->3

好了,刚刚都是由果溯因,现在我们由因得果的实战一波:

假设我们有这么一个数组

如果我们想把1,7,11取出来(贯穿行),则可以按照如下思路,

首先,1,7,11是在递增的三行,所以dim取1(行依次递增,列取下标)

其次,下标矩阵(保持维度一致)应该就是[[1],[2],[1]](内部的[]之间,对应行下标依次递增)

那如果我们想把5,1,7,13,9取出来呢(贯穿列)?就像如下这样做。

总结:你想按照你的下标取的那一个维度,就是dim的取值。而判断内部数字下标的其余维度是否递增,由

  1. dim
  2. 下标矩阵里的两个下标是否在同一维度x
  3. 如果2中的两个数字在同一维度x,x与dim是否相同

共同决定。

x=dimx≠dim
下标矩阵的两个数字在同一维度x不存在,否则报错其余维度递增
下标矩阵的两个数字不在同一维度x无关dim维度递增

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值