pytorch的索引,view和mean方法的维度问题

  1. shape与dim方法
 a = torch.randn(2,3,4)
print(a)
tensor([[[-1.2323, -0.5237,  0.0081, -0.7642],
         [ 1.2312, -1.2463, -1.2034,  1.4166],
         [ 1.5238,  0.1296,  0.7698,  0.4130]],
        [[ 0.7246,  0.3782,  0.9749, -1.3180],
         [ 0.4092, -0.9307,  0.8133, -0.8961],
         [ 0.5478,  0.9748, -0.2082,  1.0809]]])
a.shape
torch.Size([2, 3, 4])
a.dim
3 # 有三个维度,每个维度分别为2,3,4
  1. view
    Note: 1. view简单来说就是把原tensor的元素按顺序取出,填入新的tensor中。
    1. view中的参数乘积必须为24否则会报错
b = a.view(3,2,-1)
print(b)
tensor([[[-1.2323, -0.5237,  0.0081, -0.7642],
         [ 1.2312, -1.2463, -1.2034,  1.4166]],
        [[ 1.5238,  0.1296,  0.7698,  0.4130],
         [ 0.7246,  0.3782,  0.9749, -1.3180]],
        [[ 0.4092, -0.9307,  0.8133, -0.8961],
         [ 0.5478,  0.9748, -0.2082,  1.0809]]])
c = a.view(4,3,-1)
print(c)
tensor([[[-1.2323, -0.5237],
         [ 0.0081, -0.7642],
         [ 1.2312, -1.2463]],
        [[-1.2034,  1.4166],
         [ 1.5238,  0.1296],
         [ 0.7698,  0.4130]],
        [[ 0.7246,  0.3782],
         [ 0.9749, -1.3180],
         [ 0.4092, -0.9307]],
        [[ 0.8133, -0.8961],
         [ 0.5478,  0.9748],
         [-0.2082,  1.0809]]])
c = a.view(4,3)
Traceback (most recent call last):
  File "D:\anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 3296, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-68-4f6ba6dedc05>", line 1, in <module>
    c = a.view(4,3)
RuntimeError: shape '[4, 3]' is invalid for input of size 24
c = a.view(5,3,-1)
Traceback (most recent call last):
  File "D:\anaconda\lib\site-packages\IPython\core\interactiveshell.py", line 3296, in run_code
    exec(code_obj, self.user_global_ns, self.user_ns)
  File "<ipython-input-69-5d309fd757fa>", line 1, in <module>
    c = a.view(5,3,-1)
RuntimeError: shape '[5, 3, -1]' is invalid for input of size 24
  1. mean
    当不指定参数时,输出为所有元素的平均值,为一个标量;
    当指定dim时,假设dim=i。如果第i个维度为Ni,则从Ni个分量中各取一个元素,求平均值,所得tensor的shape为N1N2…N(i-1)N(i+1)…Nn
    若keepdim=True,则所得tensor的shape为N1
    N2*…N(i-1)1N(i+1)…Nn
	a.shape
Out[70]: torch.Size([2, 3, 4])
a.mean()
Out[71]: tensor(0.1280)
a.mean(0)
Out[72]: 
tensor([[-0.2539, -0.0727,  0.4915, -1.0411],
        [ 0.8202, -1.0885, -0.1951,  0.2603],
        [ 1.0358,  0.5522,  0.2808,  0.7469]])
a.mean(0).shape
Out[5]: torch.Size([3, 4])
a.mean(0,keepdim=True).shape
Out[6]: torch.Size([1, 3, 4])
相当于
m,b,c = a.shape
mean0_a = torch.zeros(b,c)
for i in range(b):
    for j in range(c):
        sum = 0
        for k in range(a):
            sum += a[k,i,j]
        sum /= m
        mean0_a[i,j] = sum
  1. 索引
    引用元素或切片有两种格式a[i][j]或a[i,j]
    切片为a[:][[j]或a[:,j]
    推荐第二种,更简洁
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值