栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【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数据类型操作有所不同。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/866867.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号