归并操作
此类操作会使输出形状小于输入形状,并可以沿着某一维度进行指定操作。如加法sum
,既可以计算整个tensor的和,也可以计算tensor中每一行或每一列的和。常用的归并操作如表3-5所示。
表3-5: 常用归并操作
函数 | 功能 |
---|---|
mean/sum/median/mode | 均值/和/中位数/众数 |
norm/dist | 范数/距离 |
std/var | 标准差/方差 |
cumsum/cumprod | 累加/累乘 |
以上大多数函数都有一个参数dim
,用来指定这些操作是在哪个维度上执行的。关于dim(对应于Numpy中的axis)的解释众说纷纭,这里提供一个简单的记忆方式:
假设输入的形状是(m, n, k)
- 如果指定dim=0,输出的形状就是(1, n, k)或者(n, k)
- 如果指定dim=1,输出的形状就是(m, 1, k)或者(m, k)
- 如果指定dim=2,输出的形状就是(m, n, 1)或者(m, n)
size中是否有"1",取决于参数keepdim
,keepdim=True
会保留维度1
。注意,以上只是经验总结,并非所有函数都符合这种形状变化方式,如cumsum
。
In [76]:
b = t.ones(2, 3) b.sum(dim = 0, keepdim=True)
Out[76]:
tensor([[2., 2., 2.]])
In [77]:
# keepdim=False,不保留维度"1",注意形状 b.sum(dim=0, keepdim=False)
Out[77]:
tensor([2., 2., 2.])
In [78]:
b.sum(dim=1)
Out[78]:
tensor([3., 3.])
In [79]:
a = t.arange(0, 6).view(2, 3) print(a) a.cumsum(dim=1) # 沿着行累加
tensor([[0, 1, 2], [3, 4, 5]])
Out[79]:
tensor([[ 0, 1, 3], [ 3, 7, 12]])