首页人工智能Pytorch7.Tensor的属性统计...

7.Tensor的属性统计操作

1.范数:

norm(p norm , dim)方法的第一个参数是p范数(0,1,2),第二个参数是维度dim。

>>> a = torch.full([8],1)
>>> b = a.reshape(2,4)
>>> c = a.reshape(2,2,2)
>>> a
tensor([1., 1., 1., 1., 1., 1., 1., 1.])
>>> b
tensor([[1., 1., 1., 1.],
        [1., 1., 1., 1.]])
>>> c
tensor([[[1., 1.],
         [1., 1.]],

        [[1., 1.],
         [1., 1.]]])
# 求L1范数(所有元素绝对值求和)
>>> a.norm(1),b.norm(1),c.norm(1)
(tensor(8.), tensor(8.), tensor(8.))
# 求L2范数(所有元素的平方和再开根号)
>>> a.norm(2),b.norm(2),c.norm(2)
(tensor(2.8284), tensor(2.8284), tensor(2.8284))

# 在b的dim 1上求L1范数
>>> b.norm(1,dim=1)
tensor([4., 4.])
# 在b的dim 1上求L2范数
>>> b.norm(2,dim=1)
tensor([2., 2.])

# 在c的dim 0上求L1范数
>>> c.norm(1,dim=0)
tensor([[2., 2.],
        [2., 2.]])
# 在c的dim 0上求L2范数
>>> c.norm(2,dim=0)
tensor([[1.4142, 1.4142],
        [1.4142, 1.4142]])

2.常见的一些统计:

>>> a = torch.arange(8).reshape(2,4).float()
>>> a
tensor([[0., 1., 2., 3.],
        [4., 5., 6., 7.]])
# 最小,最大,均值,累积,累加
>>> a.min(),a.max(),a.mean(),a.prod(),a.sum()
(tensor(0.), tensor(7.), tensor(3.5000), tensor(0.)), tensor(28.)
# 打平后的最小最大值索引,与python一致
>>> a.argmax(),a.argmin()
(tensor(7), tensor(0))
# 在给定dim上进行最小最大值索引
>>> a.argmax(dim=1),a.argmin(dim=1)
(tensor([3, 3]), tensor([0, 0]))

直接使用max和min配合dim参数也可以获得最值索引,同时得到最值的具体值。

>>> a = torch.rand(4,10)
>>> a
tensor([[0.0221, 0.5089, 0.7916, 0.8286, 0.8973, 0.5834, 0.0939, 0.8166, 0.4138,
         0.9394],
        [0.2466, 0.6844, 0.2413, 0.0219, 0.7031, 0.4109, 0.3981, 0.8156, 0.7898,
         0.6372],
        [0.9589, 0.5141, 0.8754, 0.3043, 0.7444, 0.8106, 0.9192, 0.6014, 0.5295,
         0.6762],
        [0.8421, 0.7490, 0.5258, 0.9176, 0.1464, 0.7828, 0.4362, 0.7592, 0.0624,
         0.0758]])
>>> a.max(dim=1)
(tensor([0.9394, 0.8156, 0.9589, 0.9176]), tensor([9, 7, 0, 3]))
>>> a.argmax(dim=1)
tensor([9, 7, 0, 3])
# 使用keepdim=True可以保持应有的dim,即仅仅是将求最值的那个dim的size变成了1,返回的结果是符合原Tensor语义的。
>>> a.max(dim=1,keepdim=True)
(tensor([[0.9394],
        [0.8156],
        [0.9589],
        [0.9176]]), tensor([[9],
        [7],
        [0],
        [3]]))
>>> a.argmax(dim=1,keepdim=True)
tensor([[9],
        [7],
        [0],
        [3]])

3.前k大/前k小/第k小(Top-k or k-th):

使用topk()代替max可以完成更灵活的需求,有时候不是仅仅要最大的那一个,而是最大的k个。如果是求最小的k个,只要使用参数largest=False

>>> a = torch.rand(4,10)
# 求最大的3个
>>> a.topk(3,dim=1)
(tensor([[0.9394, 0.8973, 0.8286],
        [0.8156, 0.7898, 0.7031],
        [0.9589, 0.9192, 0.8754],
        [0.9176, 0.8421, 0.7828]]), tensor([[9, 4, 3],
        [7, 8, 4],
        [0, 6, 2],
        [3, 0, 5]]))
# 求最小的3个
>>> a.topk(3,dim=1,largest=False)
(tensor([[0.0221, 0.0939, 0.4138],
        [0.0219, 0.2413, 0.2466],
        [0.3043, 0.5141, 0.5295],
        [0.0624, 0.0758, 0.1464]]), tensor([[0, 6, 8],
        [3, 2, 0],
        [3, 1, 8],
        [8, 9, 4]]))
# 求第8小的
>>> a.kthvalue(8,dim=1)
(tensor([0.8286, 0.7031, 0.8754, 0.7828]), tensor([3, 4, 2, 5]))
>>> a.kthvalue(3)
(tensor([0.4138, 0.2466, 0.5295, 0.1464]), tensor([8, 0, 8, 4]))
>>> a.kthvalue(3,dim=1)
(tensor([0.4138, 0.2466, 0.5295, 0.1464]), tensor([8, 0, 8, 4]))

4.比较运算操作(>,>=,<,<=,==,!=):

>>> a = torch.rand(2,3)
>>> a
tensor([[0.8387, 0.1605, 0.5162],
        [0.3364, 0.0641, 0.5297]])
>>> a > 0.5
tensor([[ True, False,  True],
        [False, False,  True]])
>>> torch.gt(a,0.5)
tensor([[ True, False,  True],
        [False, False,  True]])
>>> a != 0.5
tensor([[True, True, True],
        [True, True, True]])
# 比较两个数组每个位置上的元素是否相等
>>> a = torch.ones(2,3)
>>> b = torch.rand(2,3)
>>> torch.eq(a,b)
tensor([[False, False, False],
        [False, False, False]])
>>> torch.eq(a,a)
tensor([[True, True, True],
        [True, True, True]])
# 比较两个数组是否相等
>>> torch.equal(a,a)
True
RELATED ARTICLES

欢迎留下您的宝贵建议

Please enter your comment!
Please enter your name here

- Advertisment -

Most Popular

Recent Comments