属性统计
范数(norm)
向量范数表示一个向量的大小(这里的大小(size)不涉及维度,而是份量的大小),是将向量映射为一个标量的函数$f$。
通用的$L^P$范数定义如下:
$L_1$范数计算的是向量所有元素绝对值的和,$L_2$范数计算的是向量元素所有平方和的平方根,$L_\infty$范数计算的则是向量中最大元素的取值。
向量范数的性质
- 正定性:$|x|\geq0$,当且仅当$x$=0时,$|x|=0$
- 齐次性:如果我们按常数因子$\alpha$缩放向量的所有元素,其范数也会按照相同的常数因子的绝对值缩放:
- 三角不等式:与$L_2$范数相比,$L_1$范数受异常值影响较小。
矩阵范数示例
1 | x = torch.full([8],1,dtype = torch.float) |
1 | (tensor([[1., 1., 1., 1.], |
常用操作
torch.min()最小值
torch.max()最大值
torch.mean()均值
torch.prod()累乘
torch.sum()求和
torch.argmin()最小值的索引,这里返回的是打平后的索引
torch.argmax()最大值的索引,这里返回的是打平后的索引
torch.argmin(dim)最小值的索引,这里返回的是某个维度上的索引
torch.argmax(dim)最大值的索引,这里返回的是某个维度上的索引
1 | a = torch.arange(8).view(2,4).float() |
1 | (tensor([[0., 1., 2., 3.], |
a是一个[2,4]的tensor
,在dim = 1
做argmax()
,最后会得到一个[2]的tensor
。
注意:这里输出的是索引不是具体的值。min()
和max()
如果不指定维度,会打平后找出最值并返回最值,不返回索引;如果指定了维度,那么返回的是一个tuple
,包含了values
和index
,所以如果直接查看.shape
会报错,此时需用c.max(dim).values.shape
取出value
后再查看shape
。
1 | c = torch.rand(2,3) |
1 | tensor([[0.9270, 0.1358, 0.1365], |
dim和keepdim
我们在哪个维度求最值,相当于消掉了这个维度,比如:[2,4]在dim=1
求最值,得到的结果为[2]。
但是keepdim可以在求最值的时候把维度保持不变。
1 | a = torch.arange(8).view(2,4).float() |
1 | tensor([[0], |
维度保持住了。
取前k大/前k小/第k小的概率值及其索引(Top-k和k-th)
topk
.topk(num,dim,Largest)
,Largest
不填或者Largest=True
会返回最大的k个值和他们的索引,能返回比max()
更多的数据,Largest=False
会返回最大的k个值和他们的索引。
1 | a = torch.randint(1, 10,[4,10]) |
1 | tensor([[1, 4, 2, 2, 9, 6, 1, 1, 3, 8], |
kthvalue
.kthvalue(num,dim)
返回第num个小的(只能返回小的)。
1 | a = torch.randint(1, 10,[4,10]) |
1 | tensor([[3, 5, 8, 7, 9, 2, 4, 5, 6, 5], |
compare
运算符有<
, <=
, >
, >=
, !=
, ==
,会返回一个布尔类型的BoolTensor
。
1 | a = torch.rand([2,2]) |
1 | tensor([[ 0.0720, -0.5518], |