Python中x +=1和x = x + 1的区别

x = torch.rand((5, 3))
print(x)
# 改变形状
y = x.view(15)
z = x.view(-1,5) #  -1所指的维度可以根据其他维度的值推出来
print(x)
print(y)
print(x.size(),y.size(),z.size())
x = x + 1
print(x)
print(y)

运行结果:

tensor([[0.7148, 0.5680, 0.9139],
        [0.9242, 0.9893, 0.9999],
        [0.8309, 0.3248, 0.5042],
        [0.7662, 0.6790, 0.9625],
        [0.1181, 0.3736, 0.5293]])
tensor([[0.7148, 0.5680, 0.9139],
        [0.9242, 0.9893, 0.9999],
        [0.8309, 0.3248, 0.5042],
        [0.7662, 0.6790, 0.9625],
        [0.1181, 0.3736, 0.5293]])
tensor([0.7148, 0.5680, 0.9139, 0.9242, 0.9893, 0.9999, 0.8309, 0.3248, 0.5042,
        0.7662, 0.6790, 0.9625, 0.1181, 0.3736, 0.5293])
torch.Size([5, 3]) torch.Size([15]) torch.Size([3, 5])
tensor([[1.7148, 1.5680, 1.9139],
        [1.9242, 1.9893, 1.9999],
        [1.8309, 1.3248, 1.5042],
        [1.7662, 1.6790, 1.9625],
        [1.1181, 1.3736, 1.5293]])
tensor([0.7148, 0.5680, 0.9139, 0.9242, 0.9893, 0.9999, 0.8309, 0.3248, 0.5042,
        0.7662, 0.6790, 0.9625, 0.1181, 0.3736, 0.5293])

将上面的 x = x + 1 换成 x +=1

x = torch.rand((5, 3))
print(x)
# 改变形状
y = x.view(15)
z = x.view(-1,5) #  -1所指的维度可以根据其他维度的值推出来
print(x)
print(y)
print(x.size(),y.size(),z.size())
x += 1
print(x)
print(y)

运行结果:

tensor([[0.3179, 0.8790, 0.1822],
        [0.8152, 0.1586, 0.3999],
        [0.3411, 0.7993, 0.3838],
        [0.0352, 0.3884, 0.9328],
        [0.6239, 0.4884, 0.4452]])
tensor([[0.3179, 0.8790, 0.1822],
        [0.8152, 0.1586, 0.3999],
        [0.3411, 0.7993, 0.3838],
        [0.0352, 0.3884, 0.9328],
        [0.6239, 0.4884, 0.4452]])
tensor([0.3179, 0.8790, 0.1822, 0.8152, 0.1586, 0.3999, 0.3411, 0.7993, 0.3838,
        0.0352, 0.3884, 0.9328, 0.6239, 0.4884, 0.4452])
torch.Size([5, 3]) torch.Size([15]) torch.Size([3, 5])
tensor([[1.3179, 1.8790, 1.1822],
        [1.8152, 1.1586, 1.3999],
        [1.3411, 1.7993, 1.3838],
        [1.0352, 1.3884, 1.9328],
        [1.6239, 1.4884, 1.4452]])
tensor([1.3179, 1.8790, 1.1822, 1.8152, 1.1586, 1.3999, 1.3411, 1.7993, 1.3838,
        1.0352, 1.3884, 1.9328, 1.6239, 1.4884, 1.4452])

(1)不可变元素的类型有:整数、浮点数、字符串、元组
(2)可变元素的类型有:列表、字典

不可变元素的类型,“x +=1"与"x=x+1"作用一样,没有区别
可变元素的类型中,“x +=1"与"x=x+1"作用不同,区别如下:
      x +=1,表示:修改x自身的值(前提是:x必须是可变对象)
      x = x + 1,表示:创建一个新的"同名”对象x,并将x + 1,赋值给新创建的同名变量x(它的含义和y = x + 1相同,只不过这里将y取名为x了),x + 1赋值给新x后,旧x的指向就会被释放


所以如果我们想返回⼀个真正新的副本(即不共享内存)该怎么办呢?Pytorch还提供了⼀ 个 reshape() 可以改变形状,但是此函数并不能保证返回的是其拷贝,所以不推荐使用。推荐先 ⽤ clone 创造一个副本然后再使⽤ view 。

x_cp = x.clone().view(15)
x -=1
print(x)
print(x_cp)

运行结果:


tensor([[0.3179, 0.8790, 0.1822],
        [0.8152, 0.1586, 0.3999],
        [0.3411, 0.7993, 0.3838],
        [0.0352, 0.3884, 0.9328],
        [0.6239, 0.4884, 0.4452]])
tensor([1.3179, 1.8790, 1.1822, 1.8152, 1.1586, 1.3999, 1.3411, 1.7993, 1.3838,
        1.0352, 1.3884, 1.9328, 1.6239, 1.4884, 1.4452])

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值