一维
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]])