【Pytorch】取反操作符~在Pytorch和python中使用的比较

python中的取反操作

在python中取反操作符~是对数字的二进制位进行取反,然后返回取反结果对应的十进制数字。这个可以参考:Python3运算符

使用案例如下:

num = 60
# 查看二进制
print(num, bin(num))  # 60 0b111100
num_ = ~num # -(x + 1)  
print(num_, bin(num_))  # -61 -0b111101

细心的会发现,经过~处理后的结果并不是对应位置为相反关系。这就需要了解计算机是如何存储负数的了,负数通常是用其补码表示,正数的补码是其本身。假如这个整数是有符号8位(最高位是符号位,0表示正,1表示负)的,那么其对应的表示是:0011 1100,取反之后是:1100 0011,其是一个负数的补码。

那么如何将负数的补码转成十进制呢?

  1. 把补码“取反”,则有:0011 11 00 (又回来了)
  2. 把取反后的结果加1,则有0011 11 01
  3. 将2中的表示整数加上负号的结果就是这个补码实际的十进制数字了。

不难计算出上面的结果就是-61了。这也是为什么~的做相当于 - (x + 1)了。python中则是将负号单独拿出来,后面就是对应整数的二进制了,即61的二进制就是0011 1101.

除此之外,python中的True是数字1,False是数字0. 事例如下:

print(0 == False, 1 == True)  #  True True
print(~0, ~True) # -1 -2

取反运算符应用到pytorch中

bool类型的数字和非布尔类型的使用如下:

tensor_a = torch.tensor([True])
tensor_a_ = ~tensor_a
print(tensor_a)  # tensor([True])
print(tensor_a_)  # tensor([False])
tensor_b = torch.tensor([60])
tensor_b_ = ~ tensor_b
print(tensor_b)  # tensor([60])
print(tensor_b_)  # tensor([-61])

可以看出,在pytorch中对于bool类型的取反就是对True或False进行取反,这是与python中bool数据类型操作有所不同。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智绘山河

你的鼓励可能解决你下一个问题

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值