Pytorch属性统计

一、p-范数

1、p-范数基本概念

  1. x    =    [ x 1 , x 2 , . . . , x n ] T x\;=\;{\lbrack x_1,x_2,...,x_n\rbrack}^T x=[x1,x2,...,xn]T,那么 ∣ ∣ x ∣ ∣ p = ( ( ∣ x 1 ∣ ) p + ( ∣ x 2 ∣ ) p + ( ∣ x 3 ∣ ) p + . . . ( ∣ x n ∣ ) 2 ) 1 p ||x||_p=((|x_1|)^p+(|x_2|)^p+(|x_3|)^p+...(|x_n|)^2)^{\frac{1}{p}} xp=((x1)p+(x2)p+(x3)p+...(xn)2)p1
  2. 1-范数: ∣ ∣ x ∣ ∣ = ∣ x 1 ∣ + ∣ x 2 ∣ + ∣ x 3 ∣ + . . . ∣ x n ∣ ||x||=|x_1|+|x_2|+|x_3|+...|x_n| x=x1+x2+x3+...xn
  3. 2-范数: ∣ ∣ x ∣ ∣ 2 = ( ( ∣ x 1 ∣ ) 2 + ( ∣ x 2 ∣ ) 2 + ( ∣ x 3 ∣ ) 2 + . . . ( ∣ x n ∣ ) 2 ) 1 2 ||x||_2=((|x_1|)^2+(|x_2|)^2+(|x_3|)^2+...(|x_n|)^2)^{\frac{1}{2}} x2=((x1)2+(x2)2+(x3)2+...(xn)2)21
  4. ∞-范数: m a x ( ∣ x 1 ∣ , ∣ x 2 ∣ , ∣ x 3 ∣ , . . . , ∣ x n ∣ ) max(|x_1|,|x_2|,|x_3|,...,|x_n|) max(x1,x2,x3,...,xn)

2、相关函数

  1. a.norm(p,dim):第一个参数p:要求的第几范数,第二个参数dim:要在哪一维度求范数。
    1. 若dim不给出,则默认整体求范数
    2. 在哪一维度求范数,相当于将这一维度消去

3、代码实例

a = torch.full([8],1)
b = a.view(2,4)
c = a.view(2,2,2)
print(a.norm(1),b.norm(1),c.norm(1))
# out : tensor(8.) tensor(8.) tensor(8.)

print(a.norm(2),b.norm(2),c.norm(2)) # sqrt(8)
# out : tensor(2.8284) tensor(2.8284) tensor(2.8284)

# 第一个参数,给定p范数,第二个参数给定在哪个维度做范数
print(b.norm(1,dim=1)) 
# out : tensor([4., 4.])
print(b.norm(2,dim=1))
# out : tensor([2., 2.])
print(b.norm(2,dim=0))
# out : tensor([1.4142, 1.4142, 1.4142, 1.4142])
print(c.norm(2,dim=0))
# tensor([[1.4142, 1.4142],
#        [1.4142, 1.4142]])
print(c.norm(2,dim=1))
# tensor([[1.4142, 1.4142],
#        [1.4142, 1.4142]])

二、max、min等函数

1、相关函数

  1. a.min(dim):最小值,带有dim参数的话返回最值和其位置
  2. a.max(dim):最大值,带有dim参数的话返回最值和其位置
  3. a.mean():均值
  4. a.prod():累乘
  5. a.sum():累加
  6. a.argmax(dim):不带dim参数的话,是将tensor打平后求给出最值的位置。
  7. a.argmin(dim):不带dim参数的话,是将tensor打平后求给出最值的位置。
  8. keepdim参数:此参数是保持求出的结果的dim不发生变换,否则会使dim-1

2、代码实例

# max and so on
a = torch.arange(8).view(2,4).float()
print(a)
# tensor([[0., 1., 2., 3.],
#        [4., 5., 6., 7.]])

print(a.min(),a.max(),a.mean(),a.prod()) # prod是累乘
# tensor(0.) tensor(7.) tensor(3.5000) tensor(0.)

print(a.sum())
# tensor(28.)

print(a.argmax(),a.argmin()) # 打平后求max的位置
# tensor(7) tensor(0)

print(a.argmax(dim=0),a.argmax(dim=1)) # 求出对应dim上的argmax
# tensor([1, 1, 1, 1]) tensor([3, 3])

# dim and keepdim
a = torch.rand(4,10)
print(a.max(dim=1)) # 参数中带有dim,则输出max and argmax
# torch.return_types.max(
# values=tensor([0.9732, 0.9010, 0.9807, 0.9098]),
# indices=tensor([7, 1, 6, 2]))

print(a.argmax(dim=1)) # tensor([4])
# tensor([7, 1, 6, 2])

# 若keepdim = false 返回的dim消去1; keepdim = true,返回的dim不变
print(a.max(dim=1,keepdim=True)) # tensor([4,1])
# values=tensor([[0.9732],
#        [0.9010],
#        [0.9807],
#        [0.9098]]),
#indices=tensor([[7],
#        [1],
#        [6],
#        [2]]))

三、前k大,第k小

1、相关函数

  1. a.topk(k,dim,largest)
    1. 参数k:求前k大(小)
    2. 参数dim:在哪一维度求前k大(小)
    3. 参数largest:若不给出,则是求前k大,若largest=False,则是求前k小
    4. 参数返回values(值)和indices(位置)
  2. a.kthvalue(k,dim)
    1. 参数k:求第k小的数
    2. 参数dim:在哪一维度求第k小
    3. 默认是求第k小(不可通过函数进行改变),但可通过对a整体取反变成逻辑上的第k大
    4. 参数返回values(值)和indices(位置)

2、代码实例

a = torch.rand(2,5)*10
print(a)
# tensor([[3.6361, 7.2967, 5.5405, 4.6747, 9.1272],
#        [2.4848, 8.3403, 9.4151, 3.9904, 0.3933]])

print(a.topk(3,dim=1)) # 求dim=1上最大的3个
# torch.return_types.topk(
# values=tensor([[9.1272, 7.2967, 5.5405],
#         [9.4151, 8.3403, 3.9904]]),
# indices=tensor([[4, 1, 2],
#         [2, 1, 3]]))

print(a.topk(3,dim=1,largest=False)) # 求dim=1上最小的3个
# torch.return_types.topk(
# values=tensor([[3.6361, 4.6747, 5.5405],
#        [0.3933, 2.4848, 3.9904]]),
# indices=tensor([[0, 3, 2],
#        [4, 0, 3]]))
# --------------------------------------------------------

print(a.kthvalue(2,dim=1)) # 第4大
# torch.return_types.kthvalue(
# values=tensor([4.6747, 2.4848]),
# indices=tensor([3, 0]))

print(a.kthvalue(2))
# torch.return_types.kthvalue(
# values=tensor([4.6747, 2.4848]),
# indices=tensor([3, 0]))

四、比较函数

1、相关函数

  1. >、<、==、!=
  2. torch.eq(a,b):判断每个元素是否相等
  3. torch.equal(a,b):判断整个tensor是否一致

2、代码实例

print(a)
# tensor([[-0.0122,  1.2042,  0.2744],
#        [ 0.7537, -0.0352,  0.7803]])

print(a > 0)
# tensor([[False,  True,  True],
#        [ True, False,  True]])

print(torch.gt(a,0))
# tensor([[False,  True,  True],
#        [ True, False,  True]])

print(torch.eq(a>0,torch.gt(a,0))) # eq判断的是每个元素是否相等
# tensor([[True, True, True],
#         [True, True, True]])

print(torch.equal(a>0,torch.gt(a,0))) # eq判断的是整个tensor是否一致
# True
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值