python开发openstack_深度实践OpenStack:基于Python的OpenStack组件开发—3.4.5 比较和逻辑运算...

3.4.5 比较和逻辑运算

本节介绍逐元素比较张量大小的函数和逻辑函数。

可以直接使用Python运算符(、>=、== 和 !=)逐元素比较两个张量的大小或张量和数值之间的大小。当运算符的左操作数和右操作数不是大小相同的张量时,会使用前文描述的广播语义。比较的结果张量的元素类型为torch.uint8。例如:

loper = torch.tensor([-1, 1, 3], dtype=torch.float32)

roper = torch.arange(3)

print ('< : {}'.format(loper < roper))

print ('== : {}'.format(loper == roper))

注意:在PyTorch中使用运算符“==”比较两个张量时,是进行逐元素比较,而不是将张量当作整体比较两个张量的所有元素是不是都相同。如果想把两个张量作为整体比较,可以用torch.equal() 函数。

另外,torch.Tensor类还有成员方法nonzero(),相当于与0进行逐元素相等比较。

还可以用torch.min() 函数和torch.max() 函数分别逐元素求两个张量的最小值和最大值,例如:

torch.max(loper, roper)

注意:对于torch.min() 函数和torch.max() 函数,当它们只传入1个张量参数时,会分别试图统计张量内所有元素的最小值和最大值,是上一节介绍的统计函数。当它们传入两个张量参数时,则分别是逐元素选取最小值和最大值。

接下来介绍张量的逻辑运算。这里只介绍torch.where() 函数。torch.where() 函数实现了逐元素if-else的功能。torch.where() 函数有3个参数:condition、x和y。当这3个参数是大小相同的张量时,该函数返回同样大小的张量。返回的张量里的元素是这样确定的:对于每个元素,考虑condition张量中对应元素的值是1(即表示真的值)还是0(即表示假的值)。如果是1,则选择张量x中对应的元素;如果是0,则选择张量y中对应的元素。例如,下列代码就根据传入的第0个参数的值,一次选择了x中的元素、y中的元素:

cond = torch.tensor([1, 0, 1], dtype=torch.uint8)

x = torch.tensor([0.3, -0.5, 0.2])

y = torch.tensor([-0.2, 0.5, 0.3])

torch.where(cond, x, y) # 得到 [0.3, 0.5, 0.2]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值