Pytorch学习笔记5:统计计算与高阶赋值操作
#添加到学习笔记2末尾,直接运行。代码意义可以看注释。
print('——————————统计计算——————————')
norm1=torch.full([8],1.0)
print('norm1:',norm1.shape)
norm2=norm1.view(2,4)
norm3=norm1.view(2,2,2)
print('norm2:',norm2.shape)
print('norm3:',norm3.shape)
print('norm1.norm(1):',norm1.norm(1))#1范数,元素平方和
print('norm2.norm(1):',norm2.norm(1))
print('norm3.norm(1):',norm3.norm(1))
print('norm1.norm(2):',norm1.norm(2))#2范数,元素平方和再开方
print('norm2.norm(2):',norm2.norm(2))
print('norm3.norm(2):',norm3.norm(2))
print('norm2.norm(1,dim=1):',norm2.norm(1,dim=1).shape)#指定维度求范数
print('norm2.norm(1,dim=1):',norm2.norm(1,dim=1))
print('norm3.norm(1,dim=2):',norm3.norm(2,dim=2).shape)#指定维度求范数
print('norm3.norm(1,dim=2):',norm3.norm(2,dim=2))
tongji1=torch.arange(8).view(2,2,2).float()
print('tongji1:',tongji1)
print('min:',tongji1.min())
print('max:',tongji1.max())
print('mean:',tongji1.mean())#平均值
print('prod:',tongji1.prod())#累乘
print('argmax:',tongji1.argmax())#最大值索引
print('argmin:',tongji1.argmin())#最小值索引
tongji2=tongji1.view(8).view(2,4)
print('tongji2:',tongji2)
print('argmax:',tongji2.argmax(dim=1))#指定维度/行,求最大值索引
print('max:',tongji2.max(dim=1))#max会返回最大值以及最大值索引
print('argmax:',tongji2.argmax(dim=1,keepdim=True))#保持维度不变
print('max:',tongji2.max(dim=1,keepdim=True))#保持维度不变
topk1=torch.rand(4,10)
print('top3:',topk1.topk(3,dim=1))#求最大的3个数及其索引
print('last3:',topk1.topk(3,dim=1,largest=False))#求最小的3个数及其索引
print('第3小的值:',topk1.kthvalue(3,dim=1))#第3小的值及其索引
print('大于0.5的值:',topk1>0.5)#每一个元素和0.5比较,大于0.5就赋值为Ture,小于0.5赋值为False
print('不等于0.5的值:',topk1!=0.5)#不等于0.5
equal1=torch.randn(3,3)
equal2=torch.ones(3,3)
print('两个tensor元素比较:',torch.eq(equal1,equal2))#比较每一个元素
print('两个tensor比较:',torch.equal(equal1,equal2))#返回一个bool值
print('——————————统计计算——————————')
print('——————————高阶操作——————————')
cond=torch.eye(3,3)
a=torch.full([9],5.).view(3,3)
b=torch.full([9],7.).view(3,3)
print(a)
print(b)
c=(cond==1)
print(c)#condition需要是bool值组成的tensor
print(torch.where(c,a,b))#根据c的bool表来在a,b中取值
prob=torch.rand(4,10)
print(prob)
idx=prob.topk(5,dim=1)
print(idx)
idx=idx[1]
print(idx)
label=torch.arange(10)+100
print(label.expand(4,10))
print(torch.gather(label.expand(4,10),dim=1,index=idx))#根据idx的值查表赋值,返回tensor的shape与idx一样
print('——————————高阶操作——————————')