*[Warning]-unique() and unique_consecutive() are really tricky.
unique() can get the one or more 1D or more D tensors of zero or more unique elements, their indices and their counts as shown below:
*Memos:
-
unique()
can be used with torch or a tensor. - The 1st argument(
input
) withtorch
or using a tensor(Required-Type:tensor
ofint
,float
orbool
). - The 2nd argument with
torch
or the 1st argument with a tensor issorted
(Optional-Default:True
-Type:bool
). *Currently, settingFalse
is also sorted. - The 3rd argument with
torch
or the 2nd argument with a tensor isreturn_inverse
(Optional-Default:False
-Type:bool
). *It returns the indices for where elements in the original input ended up in the returned unique list. - The 4th argument with
torch
or the 3rd argument with a tensor isreturn_counts
(Optional-Default:False
-Type:bool
). *It returns the counts for each unique element. - The 5th argument with
torch
or the 4th argument with a tensor isdim
(Optional-Type:int
).
import torch
my_tensor = torch.tensor([[[2, 2, 0], [0, 1, 1]],
[[1, 3, 0], [0, 0, 2]]])
torch.unique(input=my_tensor)
my_tensor.unique()
# tensor([0, 1, 2, 3])
torch.unique(input=my_tensor,
sorted=False,
return_inverse=True,
return_counts=True)
# (tensor([0, 1, 2, 3]),
# tensor([[[2, 2, 0], [0, 1, 1]],
# [[1, 3, 0], [0, 0, 2]]]),
# tensor([5, 3, 3, 1]))
torch.unique(input=my_tensor,
sorted=False,
return_inverse=True,
return_counts=True,
dim=0)
torch.unique(input=my_tensor,
sorted=False,
return_inverse=True,
return_counts=True,
dim=-3)
# (tensor([[[1, 3, 0], [0, 0, 2]],
# [[2, 2, 0], [0, 1, 1]]]),
# tensor([1, 0]),
# tensor([1, 1]))
torch.unique(input=my_tensor,
sorted=False,
return_inverse=True,
return_counts=True,
dim=1)
torch.unique(input=my_tensor,
sorted=False,
return_inverse=True,
return_counts=True,
dim=-2)
# (tensor([[[0, 1, 1], [2, 2, 0]],
# [[0, 0, 2], [1, 3, 0]]]),
# tensor([1, 0]),
# tensor([1, 1]))
torch.unique(input=my_tensor,
sorted=False,
return_inverse=True,
return_counts=True,
dim=2)
torch.unique(input=my_tensor,
sorted=False,
return_inverse=True,
return_counts=True,
dim=-1)
# (tensor([[[0, 2, 2], [1, 0, 1]],
# [[0, 1, 3], [2, 0, 0]]]),
# tensor([1, 2, 0]),
# tensor([1, 1, 1]))
my_tensor = torch.tensor([[[2., 2., 0.], [0., 1., 1.]],
[[1., 3., 0.], [0., 0., 2.]]])
torch.unique(input=my_tensor)
# tensor([0., 1., 2., 3.])
my_tensor = torch.tensor([[[True, False, True], [True, False, True]],
[[False, True, False], [False, True, False]]])
torch.unique(input=my_tensor)
# tensor([False, True])
unique_consecutive() can get the zero or more unique elements of a 0D or more D tensor by consecutiveness as shown below:
*Memos:
-
unique_consecutive()
can be used withtorch
or a tensor. - The 1st argument(
input
) withtorch
or using a tensor(Required-Type:tensor
ofint
,float
orbool
). - The 2nd argument with
torch
or the 1st argument with a tensor isreturn_inverse
(Optional-Default:False
-Type:bool
). *It returns the indices for where elements in the original input ended up in the returned unique list. - The 3rd argument with
torch
or the 2nd argument with a tensor isreturn_counts
(Optional-Default:False
-Type:bool
). *It returns the counts for each unique element. - The 4th argument with
torch
or the 3rd argument with a tensor isdim
(Optional-Type:int
). -
unique_consecutive()
doesn't havesorted
argument.
import torch
my_tensor = torch.tensor([[[2, 2, 0], [0, 1, 1]],
[[1, 3, 0], [0, 0, 2]]])
torch.unique_consecutive(input=my_tensor)
my_tensor.unique_consecutive()
# tensor([2, 0, 1, 3, 0, 2])
torch.unique_consecutive(input=my_tensor,
return_inverse=True,
return_counts=True)
# (tensor([2, 0, 1, 3, 0, 2]),
# tensor([[[0, 0, 1], [1, 2, 2]],
# [[2, 3, 4], [4, 4, 5]]]),
# tensor([2, 2, 3, 1, 3, 1]))
torch.unique_consecutive(input=my_tensor,
return_inverse=True,
return_counts=True,
dim=0)
torch.unique_consecutive(input=my_tensor,
return_inverse=True,
return_counts=True,
dim=-3)
# (tensor([[[2, 2, 0], [0, 1, 1]],
# [[1, 3, 0], [0, 0, 2]]]),
# tensor([0, 1]),
# tensor([1, 1]))
torch.unique_consecutive(input=my_tensor,
return_inverse=True,
return_counts=True,
dim=1)
torch.unique_consecutive(my_tensor,
return_inverse=True,
return_counts=True,
dim=-2)
# (tensor([[[2, 2, 0], [0, 1, 1]],
# [[1, 3, 0], [0, 0, 2]]]),
# tensor([0, 1]),
# tensor([1, 1]))
torch.unique_consecutive(input=my_tensor,
return_inverse=True,
return_counts=True,
dim=2)
torch.unique_consecutive(input=my_tensor,
return_inverse=True,
return_counts=True,
dim=-1)
# (tensor([[[2, 2, 0], [0, 1, 1]],
# [[1, 3, 0], [0, 0, 2]]]),
# tensor([0, 1, 2]),
# tensor([1, 1, 1]))
my_tensor = torch.tensor([[[2., 2., 0.], [0., 1., 1.]],
[[1., 3., 0.], [0., 0., 2.]]])
torch.unique_consecutive(input=my_tensor)
# tensor([2., 0., 1., 3., 0., 2.])
my_tensor = torch.tensor([[[True, False, True], [True, False, True]],
[[False, True, False], [False, True, False]]])
torch.unique_consecutive(input=my_tensor)
# tensor([True, False, True, False, True, False, True, False, True, False])
Top comments (0)