torch.where()详解

功能

其实非常简单,但是好像没有搜到个靠谱的解答,所以只能我自己写一个了。

d = torch.where(a>3, b, c)

简单的说:
a是一个tensor,显然这个a>3是对a的每个元素进行判断,那么a的每个元素对应的位置就是 True 或者是 False

d 是一个shape和 b,c 相同的tensor,也就是 b,c 的shape 也必须相同。
d中的元素从b或者c中取,即:取b(True)或者c (False)中的元素。

注意:a不需要和b,c一样的shape

运行个简单的例子就明白了:

a 的shape是 (2, 2)
b, c 的shape是 (3, 2, 2)
那么a>3会返回 (2, 2) 的True or False矩阵对吧,

a = torch.range(1, 4).reshape(2, 2)
b = torch.stack([a,a,a], dim=0)
c = b - 2
d = torch.where(a>3, b, c)
print('a:', a)
print('b:', b)
print('c:', c)
print('d:', d)

输出:可以看到,因为a中满足大于3的元素下标为(1, 1),所以d的(:, 1, 1)位置取b的(:, 1, 1)的值:4,而别的下标对应的值取c对应的值。

a: tensor([[1., 2.],
        [3., 4.]])
b: tensor([[[1., 2.],
         [3., 4.]],

        [[1., 2.],
         [3., 4.]],

        [[1., 2.],
         [3., 4.]]])
c: tensor([[[-1.,  0.],
         [ 1.,  2.]],

        [[-1.,  0.],
         [ 1.,  2.]],

        [[-1.,  0.],
         [ 1.,  2.]]])
d: tensor([[[-1.,  0.],
         [ 1.,  4.]],

        [[-1.,  0.],
         [ 1.,  4.]],

        [[-1.,  0.],
         [ 1.,  4.]]])

完事儿

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值