torch.nonzero()

一维

nonzero()返回的是不为零的值在一维向量中的索引。

>>> a = torch.randn(4)
>>> a
tensor([-0.7712,  1.6482,  0.0362,  1.6212])

>>> b = (a>0.1)
>>> b.nonzero()
tensor([[1],
        [3]])
>>> b
tensor([False,  True, False,  True])

二维

nonzero()返回的是不为零的值在二维向量中的坐标,例如[0, 1]、[0, 2]代表的是二维向量第一行第二列,第一行第三列不为零。

>>> a = torch.randn(4,3)
>>> a
tensor([[-0.1272,  1.0898,  0.1808],
        [-0.6453, -1.5093,  2.1270],
        [ 0.3852,  1.0197, -0.2998],
        [-0.2550,  1.2353, -0.1208]])
>>> b = (a>0.1)
>>> b
tensor([[False,  True,  True],
        [False, False,  True],
        [ True,  True, False],
        [False,  True, False]])
>>> b.nonzero()
__main__:1: UserWarning: This overload of nonzero is deprecated:
        nonzero()
Consider using one of the following signatures instead:
        nonzero(*, bool as_tuple) (Triggered internally at  ..\torch\csrc\utils\python_arg_parser.cpp:882.)
tensor([[0, 1],
        [0, 2],
        [1, 2],
        [2, 0],
        [2, 1],
        [3, 1]])

三维

nonzero()返回的是不为零的值在三维向量中的坐标,将如下例子看作图像,那么图像为[2,3,4]==>[channels, width, height],例如[0, 0, 3]代表的是第一个通道第一行第四列不为零。

>>> a = torch.randn(2,3,4)
>>> a
tensor([[[ 0.0642, -2.1055, -1.0024,  0.6682],
         [-0.1130, -0.5724,  0.4137, -0.4402],
         [ 1.3719,  0.7411,  1.7062, -0.9893]],

        [[-0.1432,  0.4898, -0.4913,  1.1397],
         [-0.0883,  1.1581, -0.4784,  0.0195],
         [ 1.3767,  2.2682, -0.6881,  1.9919]]])

>>> b = (a>0.1)
>>> b
tensor([[[False, False, False,  True],
         [False, False,  True, False],
         [ True,  True,  True, False]],

        [[False,  True, False,  True],
         [False,  True, False, False],
         [ True,  True, False,  True]]])
>>> b.nonzero()
tensor([[0, 0, 3],
        [0, 1, 2],
        [0, 2, 0],
        [0, 2, 1],
        [0, 2, 2],
        [1, 0, 1],
        [1, 0, 3],
        [1, 1, 1],
        [1, 2, 0],
        [1, 2, 1],
        [1, 2, 3]])

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值